Win32多线程之单生产者,单消费者,单个缓冲区的同步问题

以下是在下对多线程中的单生产者,但消费者,单个缓冲区问题的理解,Win32实现,如有不对之处还望大神指教,在下感激不尽!话休絮烦,用代码说话:

#include<stdio.h>
#include<windows.h>
#include<process.h>

int buf;//缓冲区

HANDLE hProduceEvent;
HANDLE hConsumeEvent;

unsigned int __stdcall producer(void* pVoid)
{
	int i = 1;
	while (true)
	{
		WaitForSingleObject(hProduceEvent,INFINITE);
		buf = i;
		Sleep(100);//模拟生产时间
		printf("生产者生产了一件产品,其值为%d\n",buf);
		i++;
		ResetEvent(hProduceEvent);
		SetEvent(hConsumeEvent);//唤醒消费者

	}
	return 0;
}

unsigned int __stdcall consumer(void* pVoid)
{
	while (true)
	{
		WaitForSingleObject(hConsumeEvent, INFINITE);
		printf("消费者消费了产品%d\n\n", buf);
		Sleep(100);//模拟消费时间
		ResetEvent(hConsumeEvent);
		SetEvent(hProduceEvent);//唤醒生产者
	}
	return 0;
}

void main()
{
	hProduceEvent = CreateEvent(NULL,TRUE,TRUE,NULL);//生产者初始有信号
	hConsumeEvent = CreateEvent(NULL, TRUE, FALSE, NULL);//消费者初始无信号
	HANDLE hProducer = (HANDLE)_beginthreadex(nullptr, 0, producer,nullptr,0,nullptr);
	HANDLE hConsumer = (HANDLE)_beginthreadex(nullptr, 0, consumer, nullptr, 0, nullptr);
	WaitForSingleObject(hProducer,INFINITE);
	WaitForSingleObject(hConsumer, INFINITE);
	CloseHandle(hProducer);
	CloseHandle(hConsumer);
	CloseHandle(hProduceEvent);
	CloseHandle(hConsumeEvent);
	system("pause");
}

运行结果如下:
这里写图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值