资源简介

操作系统中的经典进程同步问题。利用信号量机制来解决生产者-消费者问题。

资源截图

代码片段和文件信息

#include    
#include 
#include “d_random.h“                //产生随机数用

using namespace std;

//#define MAX_THREAD_NUM 64            //最大线程数目
//int count = 0;                       //统计线程总数
HANDLE h_Mutex;                      //用于线程间的互斥   
HANDLE bufferFullSemaphore;          //当缓冲区满时生产者等待信号量  
HANDLE bufferEmptySemaphore;         //当缓冲区空时消费者等待信号量                              
const int BUFFER_SIZE = 2;           //缓冲区长度
long buffer[BUFFER_SIZE] = {0};        //缓冲区循环队列
int in = 0;                          //用与追踪产品进缓冲区时的缓冲区数组下标
int out = 0;                        //用与追踪产品出缓冲区时的缓冲区数组下标
randomNumber rndNum;                 //用于产生随机数(模拟产品)
long rn;
const int PRODUCER_NUM= 3;     //生产者的个数   
const int CONSUMER_NUM = 4;     //消费者的个数
DWORD producerID[PRODUCER_NUM];   //生产者线程的标识符   
DWORD consumerID[CONSUMER_NUM];   //消费者线程的标识符
bool control = true;              //控制生产者消费者线程的循环   

void producer1(void)     //生产者1进程
{   
while(control){
//count++;
WaitForSingleobject(bufferFullSemaphoreINFINITE); 
        WaitForSingleobject(h_MutexINFINITE);
rn = rndNum.random(10000) + 90000;
        cout << “Producter1 is producing!Product “ << 
rn << “ is producted!“ << endl << endl;      //生产产品
buffer[in] = rn;   //产品进缓冲区
in = (in + 1) % BUFFER_SIZE;   //循环缓冲区指向下一个储存空间
cout << “The product in buffer now are(0表示没有产品):“ << endl;  //输出现在缓冲区状态
for(int i = 0;i < BUFFER_SIZE;i++)
{
cout << “buffer“ << i << “:“ << buffer[i];
if(buffer[i] == 0)
cout << “       <--可生产于此“;   
            else   
cout << “   -->此产品可消费“;   
                cout << endl;   
}
cout << endl << endl << endl;
        Sleep(1000);   
        ReleaseMutex(h_Mutex);   
        ReleaseSemaphore(bufferEmptySemaphore1NULL);   
}     
}
void producer2(void)     //生产者2进程
{   
while(control){
//count++;
WaitForSingleobject(bufferFullSemaphoreINFINITE);   
        WaitForSingleobject(h_MutexINFINITE);
rn = rndNum.random(10000) + 90000;
        cout << “Producter2 is producing!Product “ << 
rn << “ is producted!“ << endl << endl;      //生产产品
buffer[in] = rn;   //产品进缓冲区
in = (in + 1) % BUFFER_SIZE;   //循环缓冲区指向下一个储存空间
cout << “The product in buffer now are(0表示没有产品):“ << endl;  //输出现在缓冲区状态
for(int i = 0;i < BUFFER_SIZE;i++)
{
cout << “buffer“ << i << “:“ << buffer[i];
if(buffer[i] == 0)
cout << “       <--可生产于此“;   
            else   
cout << “   -->此产品可消费“;   
                cout << endl;   
}
cout << endl << endl << endl;
        Sleep(2000);   
        ReleaseMutex(h_Mutex);   
        ReleaseSemaphore(bufferEmptySemaphore1NULL);   
}     
}   
void producer3(void)     //生产者3进程
{   
while(control){
//count++;
WaitForSingleobject(bufferFullSemaphoreINFINITE);   
        WaitForSingleobject(h_MutexINFINITE);
rn = rndNum.random(10000) + 90000;
        cout << “Producter3 is producing!Product “ << 
rn << “ is produc

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

     文件       3543  2008-11-02 16:11  生产者与消费者\界面\ReadMe.txt

     文件        906  2008-11-03 16:15  生产者与消费者\界面\Resource.h

     文件       1610  2008-11-23 00:05  生产者与消费者\界面\scxf.clw

     文件       2035  2008-11-02 16:11  生产者与消费者\界面\scxf.cpp

     文件       4528  2008-11-03 16:42  生产者与消费者\界面\scxf.dsp

     文件        514  2008-11-02 16:11  生产者与消费者\界面\scxf.dsw

     文件       1302  2008-11-02 16:11  生产者与消费者\界面\scxf.h

     文件      91136  2008-11-23 00:06  生产者与消费者\界面\scxf.ncb

     文件       1416  2008-11-23 00:05  生产者与消费者\界面\scxf.plg

     文件       1343  2008-11-03 16:45  生产者与消费者\界面\scxfDlg.h

     文件        206  2008-11-02 16:11  生产者与消费者\界面\StdAfx.cpp

     文件       1054  2008-11-02 16:11  生产者与消费者\界面\StdAfx.h

     文件       5038  2008-11-10 16:13  生产者与消费者\界面\scxfDlg.cpp

     文件       6772  2008-11-10 16:42  生产者与消费者\界面\scxf.rc

     文件      33316  2008-11-11 17:16  生产者与消费者\界面\scxf.aps

     文件      49664  2008-11-23 00:06  生产者与消费者\界面\scxf.opt

     文件       2358  2008-11-03 16:16  生产者与消费者\界面\res\bitmap1.bmp

     文件       2358  2008-11-03 15:58  生产者与消费者\界面\res\bitmap2.bmp

     文件       2358  2008-11-03 16:16  生产者与消费者\界面\res\bitmap3.bmp

     文件       1270  2008-11-03 16:08  生产者与消费者\界面\res\bitmap4.bmp

     文件       1270  2008-11-03 16:10  生产者与消费者\界面\res\bitmap5.bmp

     文件       1270  2008-11-03 16:15  生产者与消费者\界面\res\bitmap6.bmp

     文件       1078  2008-11-02 16:11  生产者与消费者\界面\res\scxf.ico

     文件        396  2008-11-02 16:11  生产者与消费者\界面\res\scxf.rc2

     文件     122949  2008-11-23 00:05  生产者与消费者\界面\Debug\scxf.exe

     文件     345088  2008-11-23 00:05  生产者与消费者\界面\Debug\scxf.pdb

     文件      14100  2008-11-10 16:43  生产者与消费者\界面\Debug\scxf.res

     文件     364544  2008-11-23 00:05  生产者与消费者\界面\Debug\vc60.pdb

     文件     197632  2008-11-23 00:05  生产者与消费者\界面\Debug\vc60.idb

     文件    5496080  2008-11-23 00:05  生产者与消费者\界面\Debug\scxf.pch

............此处省略27个文件信息

评论

共有 条评论