生产者-消费者(C++)|操作系统实验

//P(S) S=S-1
//V(S) S=S+1

//新生产一个产品
void Produce()
{
	std::cerr<<"Producing"<<++ProduceID<<"...";
	std::cerr<<"Succeed"<<std::endl;
}

//新生产的产品放入缓冲区
void Append()
{
	std::cerr<<"Appending a product...";
	g_buffer[in] = ProduceID;
	in = (in+1)%SIZE_OF_BUFFER;
	std::cerr<<"Succeed"<<std::endl;  
	for(int i=0;i<SIZE_OF_BUFFER;++i)
	{
		std::out<<i<<":"<<g_buffer[i];
		if(i==in) std::out<<"<--生产";
		if(i==out) std::out<<"<--消费";
		std::out<<std::endl;
	}
}

//从缓冲区取出一个产品
void Take()
{
	std::cerr<<"Taking a product...";
	ConsumeID = g_buferr[out];
	out = (out+1)%SIZE_OF_BUFFER;
	std::cerr<<"Succeed"<<std::endl;
	//输出缓冲区当前状态
	for(int i=0;i<SIZE_OF_BUFFER;++i)
	{
		std::cout<<i<<":"<<g_buffer[i];
		if(i==in) std::cout<<"<--生产";
		if(i==out) std::cout<<"<--消费";
		std::cout<<std::endl;
	}
}

void Consume()
{
	std::cerr<<"Consuming"<<ConsumeID<<"...";
	std::cerr<<"Succeed"<<std::endl;
}

//生产者
DWORD WINAPI Producer(LPVOID lpPara)
{
	while(g_continue)
	{
		WaitForSingleObject(g_hFULLSemaphore,INFINITE);
		WaitForSingleObject(g_hMutex,INFINITE);
		Produce();
		Append();
		Sleep(1500);
		ReleaseMutex(g_hMutex);
		ReleaseSemaphore(g_hEmptySemaphore,1,NULL);
	}
	return 0;
}

//消费者
DWORD WINAPI Consumer(LPVOID lpPara)
{
	while(g_continue)
	{
		WaitForSingleObject(g_hEmptySemaphore,INFINITE);
		WaitFoeSingleObject(g_hMutex,INFINITE);
		Take();
		Consume();
		Sleep(1500);
		//ReleaseSemaphore
		ReleaseMutex(g_hMutex);
		ReleaseSemaphore(g_hEmptySemaphore,1,NULL);
	}
	return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值