事件
事件是用來同步地位不相等的線程的,事件可以用來使一個線程完成一件事情,然后另外的線程完成剩下的事情。事件的使用很靈活,自動事件的激發態是由人工來控制的,而Mutex在釋放(releaseMetux)后就一直處于激發態,直到線程WaitForSingleObject。事件可以用來控制經典的讀寫模型和生產者和消費者模型。相應的方式為,生成者等待消費者的消費,再消費者消費完后通知生產者進行生產。
Mutex
Mutex是排他的占有資源,一般用于地位相等的現在進行同步,每個線程都可以排他的訪問一個資源或代碼段,不存在哪個線程對資源訪問存在優先次序。一個線程只能在Mutex處于激發態的時候訪問被保護的資源或代碼段,線程可以通過WaitForSingelObject來等待Mutex,在訪問資源完成之后,ReleaseMutex釋放Mutex,此時Mutex處于激發態。Mutex具有成功等待的副作用,在等待到Mutex后,Mutex自動變為未激發態,直到調用ReleaseMutex使Mutex變為激發態為止。自動事件也具有成功等待的副作用。手動事件沒有,必須ResetEvent使手動事件變為未激發態。進程和線程也沒有成功等待的副作用。當線程或者進程函數返回時,線程內核對象變為激發態,但WaitForSingleObject并沒有使線程或者進程的內核對象變為未激發態。
總之,事件一般用于控制線程的先后順序,而Mutex一般用于排他的訪問資源。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/anjen/archive/2009/10/26/4727791.aspx