#include "stdafx.h"
#include "myhead.h"
#include "iostream"
#include <vector>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
using namespace std;
CWinApp theApp;
#define MAX 10
char buff[MAX]={0};
int in = 0;
int out = 0;
int full = 0;
int empty = MAX;
char PRODECT[MAX] = {'A','B','C','D','E','F','G','H','I'};
vector< int > block_queue; //生产阻塞队列
vector< int > block_queue2; //消费阻塞队列
void ShowBuff()
{
cout << endl;
for(int i =0; i< MAX; i++)
{
cout<<"buff["<<i<<"]: "<<buff[i] <<endl;
}
}
int Producter(int n)
{
if( empty >= 0 ) //wait(empty)
{
cout<<"I am Producter "<< " ! ...";
empty--;
buff[in] = PRODECT[ rand() % MAX ];
cout<<"Producting..."<<buff[in]<<" at "<<in<<endl;
in= ( in+1 ) % 10;
full++; //=singal(full)]
if( block_queue2.size() > 0 ) block_queue2.pop_back() ;
return -1;
}
else
{
cout<<"Buff is full..."<<"Producter "<<" Waiting...! "<<endl;
block_queue.push_back(n); //
return n;
}
}
int Comsumer(int n)
{
if( full>0 ) //what(full)
{
cout<<"I am Consumer"<<" ! ... ";
full--;
cout<<"Consuming..."<<buff[out]<<" at "<<out<< endl; ;
buff[ out ] = 0 ;
out= ( out + 1 ) % MAX;
empty++; //=singal(empty)
if( block_queue.size() > 0 ) block_queue.pop_back() ;
return -1;
}
else
{
cout<<"Buff is empty..."<<"Consumer"<<" Waiting..." << endl;
block_queue2.push_back(n);
return n;
}
}
int main(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nCount = 0;
while(nCount < 0x1f) // f为循环次数
{
int n= rand() % 7; //生成随机数值
switch(n)
{
case 0: Producter(n) ;
break;
case 1: Comsumer(n) ;
break;
case 2: Producter(n);
break;
case 3: Producter(n);
break;
case 4: Comsumer(n) ;
break;
case 5:Producter(n);
case 6:
Producter(n) ;
default:
break;
}
Sleep(10); //调整显屏速度,执行挂起一段时间
nCount++;
ShowBuff();
cout<<"生产阻塞队列:";
for(int i=0;i< block_queue.size(); i++ )
{
cout<<block_queue[i]<<"\t";
}
cout<<endl<<"消费阻塞队列:";
for(int j=0;j< block_queue2.size(); j++ )
{
cout<<block_queue2[j ]<<"\t";
}
cout<<endl;
}
system("pause");
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
consumer-producer.rar_producer_consumer.c_生产者消费者问题
共15个文件
h:4个
cpp:2个
htm:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 46 浏览量
2022-09-19
16:32:04
上传
评论
收藏 3.39MB RAR 举报
温馨提示
c语言。生产者消费者问题的信号量解决代码。简洁明了
资源推荐
资源详情
资源评论
收起资源包目录
consumer-producer.rar (15个子文件)
生产者消费者
生产者消费者.suo 15KB
生产者消费者
test.cpp 295B
stdafx.h 1KB
myhead.h 326B
生产者消费者.vcproj.WIN-MJHRCT9KJBH.Administrator.user 1KB
生产者消费者.vcproj 4KB
all head.h 992B
resource.h 447B
main.cpp 2KB
Debug
生产者消费者.exe.embed.manifest 2KB
BuildLog.htm 4KB
vc90.pdb 44KB
vc90.idb 27KB
生产者消费者.ncb 12.64MB
生产者消费者.sln 920B
共 15 条
- 1
资源评论
四散
- 粉丝: 67
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功