生产者进程:
4)实验结果
三.实验源代码
#include
const unsigned short SIZE_OF_BUFFER = 10; //缓冲区长度 unsigned short ProductID = 0; //产品号
unsigned short ConsumeID = 0; //将被消耗的产品号 unsigned short in = 0;
unsigned short out = 0;
int g_buffer[SIZE_OF_BUFFER]; bool g_continue = true; HANDLE g_hMutex; HANDLE g_hFullSemaphore; HANDLE g_hEmptySemaphore;
DWORD WINAPI Producer(LPVOID); //生产者线程 DWORD WINAPI Consumer(LPVOID); //消费者线程
int main() {
//创建各个互斥信号
g_hMutex = CreateMutex(NULL,FALSE,NULL); g_hFullSemaphore
=
CreateSemaphore(NULL,SIZE_OF_BUFFER-1,SIZE_OF_BUFFER-1,NULL);
g_hEmptySemaphore
CreateSemaphore(NULL,0,SIZE_OF_BUFFER-1,NULL);
=
//总的线程数 const
unsigned
short
THREADS_COUNT
=
PRODUCERS_COUNT+CONSUMERS_COUNT;
HANDLE hThreads[PRODUCERS_COUNT]; //各线程的handle
DWORD producerID[CONSUMERS_COUNT]; //生产者线程的标识符
DWORD consumerID[THREADS_COUNT]; //消费者线程的标识符
//创建生产者线程
for (int i=0;i hThreads[i]=CreateThread(NULL,0,Producer,NULL,0,&producerID[i]); if (hThreads[i]==NULL) return -1; } //创建消费者线程 for ( i=0;i hThreads[PRODUCERS_COUNT+i]=CreateThread(NULL,0,Consumer,NULL,0,&consumerID[i]); if (hThreads[i]==NULL) return -1; } while(g_continue){ if(getchar()){ //按回车后终止程序运行 g_continue = false; } } return 0; } void Produce() { std::cerr << \ std::cerr << \} //把新生产的产品放入缓冲区 void Append()