首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

亲,这个有关问题困惑小弟我很久了

2012-09-10 
亲,这个问题困惑我很久了生产者---消费者模型,信号量就可以保护资源了,为什么还要互斥体呢?//生产者DWORDW

亲,这个问题困惑我很久了
生产者---消费者模型,信号量就可以保护资源了,为什么还要互斥体呢?


//生产者 
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; 




[解决办法]
信号量是一个计数,在计数不超情况下生产和消费是可以同时进行的,但消费和生产都要操作一个队列,而这些动作是可能在多个线程里发生的,所以必须要把这个队列保护保证容器的完整性,比如容器里刚放一个东西还没放好,另一个线程睡醒来消费去操作这个容器,这个容器就会坏掉

热点排行