***************/
#include "stdafx.h"
#define MAXNUM 12
HANDLE empty_Semaphore;//设置信号量用。empty_Semaphore表示空的缓冲池的数量
HANDLE full_Semaphore;//用full_Semaphore表示满的缓冲池的数量
HANDLE mutex_Semaphore;//用mutex_Semaphore表示互斥信号量
/*mutex_Semaphore控制的是流程,当A完成之后才进行B的操作,而不是A、B操作的数据*/
void Producer(void )//创建生产者进程
{
for (static int i=1;i
{
WaitForSingleObject(empty_Semaphore,-1);
//对empty_Semaphore进行P操作
WaitForSingleObject(mutex_Semaphore,-1);
//对mutex_Semaphore进行P操作
printf("生产者%d准备生产 \n",i);
printf("生产者%d开始往缓冲区中写数据... \n",i);
//生产者生产产品
printf("生产者%d开始退出缓冲区... \n\n",i);
ReleaseSemaphore(mutex_Semaphore,1,NULL);
//对mutex_Semaphore进行V操作
ReleaseSemaphore(full_Semaphore,1,NULL);
//对full_Semaphore进行V操作
}
return ;
}
void Consumer(void )//创建消费者进程
{
//return;
for (static int j=1;j {
WaitForSingleObject(full_Semaphore,-1);
//对full_Semaphore进行P操作
WaitForSingleObject(mutex_Semaphore,-1);
//对mutex_Semaphore进行P操作
printf("消费者%d准备消费 \n",j);
printf("消费者%d开始消费缓冲区中数据\n",j);//消费者消费产
printf("消费者%d开始开始退出缓冲区... \n\n",j);
ReleaseSemaphore(mutex_Semaphore,1,NULL);
//对mutex_Semaphore进行V操作
ReleaseSemaphore(empty_Semaphore,1,NULL);
//对empty_Semaphore进行V操作
}
return;
}
void main ()
{
HANDLE Data[4];//创建HANDLE数组Data
empty_Semaphore=CreateSemaphore(NULL,5,5,NULL);//创建信号量empty_Semaphore
full_Semaphore=CreateSemaphore(NULL,0,5,NULL);//创建信号量full_Semaphore
mutex_Semaphore=CreateSemaphore(NULL,1,1,NULL);//创建互斥信号量mutex_Semaphore
HANDLE handle[4];//创建HANDLE数组handle
//以下是创建生产着和消费者进程
handle[0]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Producer),&;Data[0],0,NULL);
handle[2]=CreateThread(NULL,0,(LP
THREAD_START_ROUTINE)(Producer),&;Data[2],0,NULL);
if (handle[0]==NULL||handle[2]==NULL)
{
printf("创建生产者线程失败 \n");
}
handle[1]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Consumer),&;Data[1],0,NULL);
handle[3]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Consumer),&;Data[3],0,NULL);
if (handle[0]==NULL||handle[3]==NULL)
{
printf("创建消费者线程失败 \n");
}
WaitForMultipleObjects(4,handle,TRUE,-1);//主进程等待线程的结束
return;
}
**********************************************************************
用于实现多生产者,单消费者的同步问题
//新建信号量
hSemaphore = CreateSemaphore(NULL,1,1,"MUSEX");//控制信号量
hStored = CreateSemaphore(NULL,0,100,"Stored");//读控制信号量
hEmpty = CreateSemaphore(NULL,100,100,"Empty");//写控制信号量
//读数据
readRecord()
{
WaitForSingleObject(hStored,INFINITE);
WaitForSingleObject(hSemaphore,INFINITE);
//读操作
ReleaseSemaphore(hSemaphore,1,NULL);
ReleaseSemaphore(hEmpty,1,NULL);
}
//写数据
writeRecord()
{
WaitForSingleObject(hEmpty,INFINITE);
WaitForSingleObject(hSemaphore,INFINITE);
//写数据操作
ReleaseSemaphore(hSemaphore,1,NULL);
ReleaseSemaphore(hStored,1,NULL);
}