}
}
}
std::cout< /*----------------------把新生产的产品放入缓冲区结束------------------------*/ /*----------------------------------------------------------*/ void Consume()//消费一个产品 { } /*----------------------------------------------------------*/ /*-----------------------从缓冲区中取出一个产品开始-------------------------*/ //从缓冲区中取出一个产品 void Take() { std::cout< std::cerr<<\从缓冲区取出一个产品\ConsumeID=g_buffer[out]; out=(out+1)%SIZE_OF_BUFFER; std::cerr< 消 费 一 个 产 品 结 束 std::cout< std::cerr<<\消费一个产品: \std::cout< 消 费 一 个 产 品 开 始 } std::cout<<\缓冲区 产品 生产者/消费者\//取出一个产品后,输出缓冲区当前的状态 for(int i=0;i //输出缓冲区下标 if(i<10) std::cout< else std::cout< if(i==in) { } if(i==out) { } std::cout< if(g_buffer[i]<10) std::cout<<\if(g_buffer[i]<10) std::cout<<\ else std::cout<<\ std::cout<<\生产者\输出生产者的指针位置 else std::cout<<\ std::cout<<\消费者\输出消费者的指针位置 /*-----------------------从缓冲区中取出一个产品结束 -------------------------*/ /*-----------------------------生 产 者 线 程 -------------------------------*/ //生产者线程 DWORD WINAPI Producer(LPVOID lpPara) { while(g_continue) { //资源信号量的P操作 WaitForSingleObject(g_hFullSemaphore,INFINITE); //互斥信号量的P操作 WaitForSingleObject(g_hMutex,INFINITE); //生产一个产品 Produce(); //把新生产的产品放入缓冲区 Append(); Sleep(2000); //互斥信号量的V操作 ReleaseMutex(g_hMutex); //资源信号量的V操作 ReleaseSemaphore(g_hEmptySemaphore,1,NULL); } return 0; } /*-----------------------------生 产 者 线 程 -------------------------------*/ /*-----------------------------消 费 者 线 程 开 始 结 束 开 始 -------------------------------*/ //消费者线程 DWORD WINAPI Consumer(LPVOID lpPara) { while(g_continue) { //资源信号量的P操作 WaitForSingleObject(g_hEmptySemaphore,INFINITE); //互斥信号量的P操作 WaitForSingleObject(g_hMutex,INFINITE); //从缓冲区中取出一个产品 Take(); //消费一个产品 Consume(); Sleep(2000); //互斥信号量的V操作 ReleaseMutex(g_hMutex); //资源信号量的V操作 ReleaseSemaphore(g_hFullSemaphore,1,NULL); } return 0; } /*-----------------------------消 费 者 线 程 结 -------------------------------*/ /*---------------------------创 建 生 产 者 线 程 开 -----------------------------*/ void createPT()//创建生产者线程 { 束 始