亲,这个问题困惑我很久了
生产者---消费者模型,信号量就可以保护资源了,为什么还要互斥体呢?
//生产者
DWORD WINAPI Producer(LPVOID lpPara)
{
while(g_continue){
WaitForSingleObject(g_hFullSemaphore,INFINITE);
WaitForSingleObject(g_hMutex,INFINITE);
Produce();
Append();
Sleep(1500);
ReleaseMutex(g_hMutex);
ReleaseSemaphore(g_hEmptySemaphore,1,NULL);
}
return 0;
}
//消费者
DWORD WINAPI Consumer(LPVOID lpPara)
{
while(g_continue){
WaitForSingleObject(g_hEmptySemaphore,INFINITE);
WaitForSingleObject(g_hMutex,INFINITE);
Take();
Consume();
Sleep(1500);
ReleaseMutex(g_hMutex);
ReleaseSemaphore(g_hFullSemaphore,1,NULL);
}
return 0;
}
[解决办法]
信号量是一个计数,在计数不超情况下生产和消费是可以同时进行的,但消费和生产都要操作一个队列,而这些动作是可能在多个线程里发生的,所以必须要把这个队列保护保证容器的完整性,比如容器里刚放一个东西还没放好,另一个线程睡醒来消费去操作这个容器,这个容器就会坏掉