资源简介
在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.em
文件 472 2010-05-20 14:24 Produce_Consume_Pthread\Debug\produce_consume.exe.em
文件 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
- 上一篇:气象CDO说明
- 下一篇:FLASH拼图游戏源码
相关资源
- Microsoft Forms 2.0107770
- AXURE移动端素材元件库68580
- Rational Rose Common破解文件
- ddos压力测试工具99657
- 双木三林_XMOS driver V4.6
- 联想H61主板BIOS升级F9KT58AUS支持22NM.i
- photoshop经典1000例
- Eeupdate.exe
- AMIDEDOS AMI
- Reparatory Effects of Nicotine on NMDA Recepto
- Apolipoprotein E4 Impairs in vivo Hippocampal
- Histamine excites rat lateral vestibular nucle
- Diltiazem augmented pentobarbital-induced LORR
- Lenovo Z460 SLIC2.1 LENOVO-29CN38WW(V2.15)
- 联想G400G500G490BIOS
- Fabrication and all-optical poling characteris
- Rtx51_tiny_RTOS中文版.pdf
- Micrium.RTOS.1.0.0.pack
- ASUS BIOS 加NVME协议文件: Nvme.ffs NV
- 易语言post提交示例
- Phoenix BIOS Editor.rar
- HOOK小工具(进程、窗口、全局)
- 直观端口查看器,详细显示可疑进程
- DOS播放器 QuickViewPro破解版
- HP笔记本BIOS丢失解决方法,DMI TOOLK
- Y450 BIOS白名单
- 内核驱动进程保护演示程序
- nachos-lab 02
- BIOS修改工具DMI236
- CMOS两级运算放大器设计指导
评论
共有 条评论