您当前的位置: 首页 >  c++

phymat.nico

暂无认证

  • 1浏览

    0关注

    1967博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++编程模拟生产者消费者模型

phymat.nico 发布时间:2015-03-05 15:14:19 ,浏览量:1

生产者消费者问题是操作系统中典型的进程同步互斥问题,(英语:Producer-Consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。

该问题描述了两个共享固定大小缓冲区的线程“生产者”(Producer)和“消费者”(Consumer)在实际运行时会发生的问题。

生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。

问题的约束条件是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中为空时消耗数据。

下面的C++程序代码用水果的例子模拟生产者消费者模型,生产者随机生产水果列表{"Apple","Banana","Cherry","Orange","Pear","Peach","WaterMelon"}中的一种,缓冲区用数组模拟。

程序应用了互斥锁和信号量,使用了CreateMutex,ReleaseMutex,CreateSemaphore,ReleaseSemaphore,WaitForSingleObject等Windows下的线程函数。

C++代码如下:

#include #include #include #include #include using namespace std; const int limit = 30; //生产总量 const int maxsize = 10; //缓冲区大小 const int kind = 7; int bufIdx = 0; //当前缓冲区下标 string buf[maxsize]; //缓冲区 (字符串) //伪造的产品 string product[] = {"Apple","Banana","Cherry","Orange","Pear","Peach","WaterMelon"}; HANDLE mutex,full,empty; HANDLE disp; //用于控制屏幕打印的互斥锁 //生产者子过程 DWORD WINAPI Producer(LPVOID param) { int ct,idx; const int pwait = 100; srand(time(NULL)); //随机数播种 WaitForSingleObject(disp, INFINITE); cout
关注
打赏
1659628745
查看更多评论
立即登录/注册

微信扫码登录

0.0514s