同步對象及常用API
1、 事件
事件(Event)是一個同步對象,它有兩種狀態:有信號狀態和無信號狀態。線程只有在事件有信號的時候才能獲取事件,並設置事件為無信號狀態,使得其他線程不能訪問事件所保護的數據或代碼段。線程使用完后應該將事件設置為有信號狀態,以使其他線程能夠使用。
API:
SetEvent:設置事件狀態為有信號狀態。
CreateEvent:創建一個事件對象。
ResetEvent:重設事件對象狀態為無信號狀態。
OpenEvent:通過返回一個已存在事件對象的句柄,使得多個進程使用同一個事件對象。
PulseEvent:設置指定的事件對象為有信號的,然后重設為無信號的。它用於釋放等待線程。
WaitForSingleObject:等待一個事件。
2、 互斥量
互斥量(mutex)與臨界區非常相似,只是互斥量可在進程間使用。互斥量通過強制每個線程擁有互斥量對象使線程輪流使用資源,每次只有一個線程擁有互斥量對象。
API:
ReleaseMutex:釋放特定互斥量對象的所有權,在擁有權線程完成使用該互斥量控制的資源時使用該API。
CreateMutex:創建一個互斥量對象。
OpenMutex:通過返回一個已創建的互斥量對象的句柄在多個進程間同步。
3、 信號燈
信號量(Semaphores)被一定數量的線程用於控制對資源的訪問(與臨界區相反,臨界區只允許一個線程訪問資源或代碼段)。信號量有個資源計數器(resource counter)。每個要訪問信號量控制的資源的線程等待信號量,並將資源計數器減1。若計數器為0,則沒有資源了,並且將來要訪問資源的請求要等待。當一個線程使用完資源后,它釋放信號量,即將資源計數器加1。
API:
CreateSemaphore:創建一個信號量,並設置其資源計數器。
ReleaseSemaphore:釋放一個信號量,並將其資源計數器加1.
WaitForSingleObject:等待一個信號量(或者任何對象)。
CloseHandle:關閉句柄,並釋放資源。
4、 定時器
它等待某一特定時刻的到來,並通知等待線程。
5、 臨界區
它每次只允許一個線程訪問資源,如公共數據或一段代碼。與其他同步對象如互斥量相比,臨界區相對較快。
API:
InitalizeCriticalSection: 在使用下面API之前初始化臨界區對象。
EnterCriticalSection: 它使調用線程等待臨界區對象,並在獲得擁有權時返回。
TryEnterCriticalSection: 與EnterCritical一樣,只是該API不會等待。
DeleteCriticalSection:它釋放臨界區對象使用的系統資源。此時臨界區對象不能被任何線程占用。
LeaveCriticalSection: 釋放對臨界區對象的擁有權。
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。