• 大小: 3.24MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-03
  • 语言: 其他
  • 标签: OS  进程  

资源简介

在Windows和Linux操作系统上,利用各自操作系统提供的Mutex和信号量机制(Win32 API或Pthreads),实现生产者/消费者问题。

资源截图

代码片段和文件信息

#pragma comment(lib “pthreadVSE2.lib“)
#include 
#include 
#include 
#include 
using namespace std;

const unsigned short BUFFER_SIZE= 10; //缓冲区长度
unsigned short ProductID = 0;    //产品号
unsigned short ConsumeID = 0;    //将被消耗的产品号
unsigned short in = 0;      //产品进缓冲区时的缓冲区下标
unsigned short out = 0;      //产品出缓冲区时的缓冲区下标
int BUFFER[BUFFER_SIZE];    //缓冲区是个循环队列
bool g_continue = true;      //控制程序结束
pthread_mutex_t g_hMutex;       //用于线程间的互斥
sem_t g_hFullSemaphore;     //当缓冲区满时迫使生产者等待
sem_t g_hEmptySemaphore;     //当缓冲区空时迫使消费者等待
void *produce(void *param);       //生产者进程
void *consume(void *param);       //消费者进程

void main()
{
cout<<“在Linux操作系统上,利用Mutex和信号量机制(Pthreads),实现生产者/消费者问题“< cout< getchar();
pthread_mutex_init(&g_hMutexNULL);//创建各个互斥信号
sem_init(&g_hFullSemaphore00);
sem_init(&g_hEmptySemaphore05);
const unsigned short PRODUCERS_COUNT = 3;  //生产者的个数
    const unsigned short CONSUMERS_COUNT = 1;  //消费者的个数
const unsigned short THREADS_COUNT = PRODUCERS_COUNT+CONSUMERS_COUNT;//总的线程数

    HANDLE hThreads[PRODUCERS_COUNT]; 
pthread_t producer[CONSUMERS_COUNT];           //生产者进程
    pthread_t consumer[THREADS_COUNT];           //消费者进程
for(int e=0;e {
BUFFER[e]=0;
}
for(int i=0;i pthread_create(&producer[i] NULL&produce NULL);//创建生产者进程

}
for(int j=0;j pthread_create(&consumer[j] NULL&consume NULL);//创建消费者进程

}
while(g_continue){
        if(getchar()){ //按回车后终止程序运行
            g_continue = false;
        }
    }
}
//生产一个产品。简单模拟了一下,仅输出新产品的ID号
void Producing()
{
    cout< cout<<“生产一个产品: “<<++ProductID<}
void Consuming()
{
    cout< cout<<“消费一个产品: “<}

void Append()
{
    cout<<“向缓冲区存入一个新产品“;
BUFFER[in]=ProductID;
in=(in+1)%BUFFER_SIZE;
cout< cout<<“缓冲区  产品“< //新产品放入缓冲区后,输出缓冲区当前的状态
for(int i=0;i {
if(in>=out)
{
if (i=out)
cout< else
cout< }
else
{
if(i>=in && i cout< else
cout< }
cout< }
}
void Take()
{
cout< cout<<“按序从缓冲区取出一个产品“;
ConsumeID=BUFFER[out];
out=(out+1)%BUFFER_SIZE;
cout< cout< cout<<“缓冲区  产品“< //取出一个产品后,输出缓冲区当前的状态
for(int i=0;i {
if(in>=out)
{
if (i=out)
cout< else
cout< }
else
{
if(i>=in && i cout< else
cout< }
cout<    }
}

void *produce(void *param){
while(g_continue){
        Sleep(1500);
sem_wait(&g_hEmptySemaphor

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       6548  2010-05-27 20:02  Produce_Consume_Pthread\Debug\BuildLog.htm

     文件         63  2010-05-27 20:02  Produce_Consume_Pthread\Debug\mt.dep

     文件     593408  2010-05-27 20:02  Produce_Consume_Pthread\Debug\produce_consume.exe

     文件        406  2010-05-20 14:24  Produce_Consume_Pthread\Debug\produce_consume.exe.embed.manifest

     文件        472  2010-05-20 14:24  Produce_Consume_Pthread\Debug\produce_consume.exe.embed.manifest.res

     文件        381  2010-05-27 20:02  Produce_Consume_Pthread\Debug\produce_consume.exe.intermediate.manifest

     文件    1392476  2010-05-27 20:02  Produce_Consume_Pthread\Debug\produce_consume.ilk

     文件     282191  2010-05-27 20:02  Produce_Consume_Pthread\Debug\produce_consume.obj

     文件    3058688  2010-05-27 20:02  Produce_Consume_Pthread\Debug\produce_consume.pdb

     文件      50176  2010-05-20 14:23  Produce_Consume_Pthread\Debug\vc60.idb

     文件      53248  2010-05-20 14:23  Produce_Consume_Pthread\Debug\vc60.pdb

     文件     609280  2010-05-27 20:02  Produce_Consume_Pthread\Debug\vc90.idb

     文件     233472  2010-05-27 20:02  Produce_Consume_Pthread\Debug\vc90.pdb

     文件       3904  2010-05-27 20:02  Produce_Consume_Pthread\produce_consume.cpp

     文件       3509  2010-05-20 14:23  Produce_Consume_Pthread\produce_consume.dsp

     文件        553  2010-05-20 14:23  Produce_Consume_Pthread\produce_consume.dsw

     文件    9636864  2010-05-27 20:04  Produce_Consume_Pthread\produce_consume.ncb

     文件      48640  2010-05-20 14:23  Produce_Consume_Pthread\produce_consume.opt

     文件      18632  2010-05-20 14:23  Produce_Consume_Pthread\produce_consume.plg

     文件        895  2010-05-27 19:57  Produce_Consume_Pthread\produce_consume.sln

    ..A..H.      9728  2010-05-27 20:04  Produce_Consume_Pthread\produce_consume.suo

     文件       4949  2010-05-20 14:24  Produce_Consume_Pthread\produce_consume.vcproj

     文件       1423  2010-05-27 20:04  Produce_Consume_Pthread\produce_consume.vcproj.SUNNY-yang-PC.SUNNY-yang.user

     目录          0  2011-05-10 14:07  Produce_Consume_Pthread\Debug

     目录          0  2011-05-10 14:07  Produce_Consume_Pthread

----------- ---------  ---------- -----  ----

             16009906                    25


评论

共有 条评论