草庐IT

C++实现经典同步问题(生产者消费者、读者写者、哲学家进餐、吸烟者问题)

一、生产者-消费者问题环境:windows问题描述:一组生产者进程和一组消费者进程共享一个初始为空、大小为〃的缓冲区,只有缓冲区没满时,生产者才能把消息放入缓冲区,否则必须等待;只有缓冲区不空时,消费者才能从中取出消息,否则必须等待。由于缓冲区是临界资源,它只允许一个生产者放入消息,或一个消费者从中取出消息。代码:#include#include#includetypedefHANDLESemaphore;#defineP(S)WaitForSingleObject(S,INFINITE)#defineV(S)ReleaseSemaphore(S,1,NULL)intproduceId=100

C语言 哲学家进餐问题

 #include#include#includemalloc.h>#include#include#include#include#defineNsem_tchopsticks[N];//设置5种信号量,有5种不同类型的资源,每一种有1个,这样便于理解,因为每个哲学家,sem_tm;//最多允许有m(4)个哲学家同时拿起左筷子intphilosophers[N]={0,1,2,3,4};//代表5个哲学家的编号voiddelay(intlen){inti=rand()%len;intx;while(i>0){x=rand()%len;while(x>0){x--;i--;}}}void*ph