资源简介
在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拼图游戏源码
相关资源
- 技嘉主板GA-H77-DS3H BIOS 添加了NVME
- 多边形相交检测demo
- composer.phar
- freertos 使用培训
- Quite Imposing Plus 4.0j + Windows和MAC版 可用
- The Boost Graph Library(原版进口图书)
- 基于STM32的proteus仿真——扫地机器人
- 基于ROS的机械臂控制系统的设计
- Chameleon r2922最新变色龙.zip
- OS-ELM在线序列极限学习机
- RG-JCOS系列捷云操作系统V2.4版本企业版
- cocos creator写的抓娃娃小
- 湖北大学操作系统期末复习大全包含
- cocosCreator切水果
- TermExcelerator.sdlplugin
- xfeatures2d.rar
- Redhat7 安装 yum 亲测 图解 这是安装全
- 计算机操作系统实验(5个详细实验)
- Cisco ASA5510 IOS
- DOSBox0.74-win32-installer.zip
- DELL C6100BIOS文件
- 操作系统OS
- 广东工业大学操作系统实验程序及报
- Photoshop无法复制剪贴中文解决组件
- EJB网上订餐项目源代码
- catkin_ws.tar.gz ROS下实现图片ORB特征匹
- 最实用、最详细的Xcode4.3开发第一个
- nachos Lab4实习报告.pdf
- 采用时间片轮转算法的进程调度程序
- os-easy管理系统使用说明
评论
共有 条评论