事件
事件是用來(lái)同步地位不相等的線程的,事件可以用來(lái)使一個(gè)線程完成一件事情,然后另外的線程完成剩下的事情。事件的使用很靈活,自動(dòng)事件的激發(fā)態(tài)是由人工來(lái)控制的,而Mutex在釋放(releaseMetux)后就一直處于激發(fā)態(tài),直到線程WaitForSingleObject。事件可以用來(lái)控制經(jīng)典的讀寫(xiě)模型和生產(chǎn)者和消費(fèi)者模型。相應(yīng)的方式為,生成者等待消費(fèi)者的消費(fèi),再消費(fèi)者消費(fèi)完后通知生產(chǎn)者進(jìn)行生產(chǎn)。
Mutex
Mutex是排他的占有資源,一般用于地位相等的現(xiàn)在進(jìn)行同步,每個(gè)線程都可以排他的訪問(wèn)一個(gè)資源或代碼段,不存在哪個(gè)線程對(duì)資源訪問(wèn)存在優(yōu)先次序。一個(gè)線程只能在Mutex處于激發(fā)態(tài)的時(shí)候訪問(wèn)被保護(hù)的資源或代碼段,線程可以通過(guò)WaitForSingelObject來(lái)等待Mutex,在訪問(wèn)資源完成之后,ReleaseMutex釋放Mutex,此時(shí)Mutex處于激發(fā)態(tài)。Mutex具有成功等待的副作用,在等待到Mutex后,Mutex自動(dòng)變?yōu)槲醇ぐl(fā)態(tài),直到調(diào)用ReleaseMutex使Mutex變?yōu)榧ぐl(fā)態(tài)為止。自動(dòng)事件也具有成功等待的副作用。手動(dòng)事件沒(méi)有,必須ResetEvent使手動(dòng)事件變?yōu)槲醇ぐl(fā)態(tài)。進(jìn)程和線程也沒(méi)有成功等待的副作用。當(dāng)線程或者進(jìn)程函數(shù)返回時(shí),線程內(nèi)核對(duì)象變?yōu)榧ぐl(fā)態(tài),但WaitForSingleObject并沒(méi)有使線程或者進(jìn)程的內(nèi)核對(duì)象變?yōu)槲醇ぐl(fā)態(tài)。
總之,事件一般用于控制線程的先后順序,而Mutex一般用于排他的訪問(wèn)資源。
本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/anjen/archive/2009/10/26/4727791.aspx