/*
多线程之单生产者,单消费者,多缓冲区问题
*/
#include<stdio.h>
#include<windows.h>
#include<process.h>
#define BUF_SIZE 10
int buffer[BUF_SIZE]; //缓冲区
int in=0, out=0;
HANDLE hEmpty, hFull;
unsigned int __stdcall producer(void* pVoid)
{
int production = 0;
while (true)
{
WaitForSingleObject(hEmpty, INFINITE); //执行P操作
Sleep(1000); //模拟生产时间
production++; //生产一件产品
printf("生产者生产了产品%d\n", production);
buffer[in] = production;
in = (in+1) % BUF_SIZE;
ReleaseSemaphore(hFull, 1, NULL); //执行V操作
}
return 0;
}
unsigned int __stdcall consumer(void* pVoid)
{
int production;
while (true)
{
WaitForSingleObject(hFull, INFINITE); //执行P操作
production = buffer[out];
out = (out + 1) % BUF_SIZE;
printf("消费者消费了产品%d\n", production);
Sleep(1000); //模拟消费时间
ReleaseSemaphore(hEmpty, 1, NULL); //执行V操作
}
return 0;
}
void main()
{
hEmpty = CreateSemaphore(NULL,BUF_SIZE,BUF_SIZE,NULL);
hFull = CreateSemaphore(NULL, 0, BUF_SIZE, 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(hEmpty);
CloseHandle(hFull);
system("pause");
}
多线程之单生产者、单消费者、多缓冲区的同步问题解决(Win32 API实现)
最新推荐文章于 2022-09-14 23:23:35 发布