资源简介
操作系统中的经典进程同步问题。利用信号量机制来解决生产者-消费者问题。
代码片段和文件信息
#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个文件信息
- 上一篇:影视后期 AE工程 源文件
- 下一篇:安卓音乐播放器源码
相关资源
- 生产者-消费者进程实现Produce_Consume
- 操作系统课程设计生产者和消费者问
- 进程线程之间的同步生产者消费者信
- 进程同步实验——生产者与消费者问
- 华中科技大学操作系统课程设计代码
- 操作系统课程设计生产者消费者
- 并行openmp程序实现生产者消费者
- 操作系统生产者——消费者模拟程序
- 利用管程_信号量解决生产者消费者问
- 基于队列的状态机—生产者消费者架
- 操作系统课程设计报告-生产者与消费
- 华南理工大学操作系统实验:生产者
- 用多线程同步方法解决生产者-消费
- Linux C利用多进程或多线程模拟实现生
- 操作系统课设,生产者消费者演示程
- 操作系统生产者、消费者算法——j
- 操作系统实验生产者与消费者实验报
- QT窗口界面模拟生产者消费者
- 多进程同步橘子苹果问题
- 进程同步模拟设计--吃水果问题
- 操作系统 课程设计 实现生产者消费者
- 操作系统实现生产者消费者问题
- 生产者消费者问题实验报告和代码实
- LABVIEW的生产者消费者模板
- 多生产者多消费者缓冲区问
- 操作系统课程设计生产者与消费者
- 进程同步与互斥 生产者与消费者问题
- 生产者消费者C 代码
- 操作系统课程设计-消费者生产者问
- Linux 0.11下信号量的简单实现——用生
评论
共有 条评论