线程同步机制有临界区、互斥、信号量优缺点
生活随笔
收集整理的這篇文章主要介紹了
线程同步机制有临界区、互斥、信号量优缺点
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
線程同步技術。
1. Critical Sections(臨界段),源代碼中如果有不能由兩個或兩個以上線程同時執行的部分,可以用臨界段來使這部分的代碼執行串行化。它只能在一個獨立的進程或一個獨立的應用程序中使用。使用方法如下:
//在窗體創建中
InitializeCriticalSection(Critical1)
//在窗體銷毀中
DeleteCriticalSection(Critical1)
//在線程中
EnterCriticalSection(Critical1)
……保護的代碼
LeaveCriticalSection(Critical1)
2. Mutex(互斥對象),是用于串行化訪問資源的全局對象。我們首先設置互斥對象,然后訪問資源,最后釋放互斥對象。在設置互斥對象時,如果另一個線程(或進程)試圖設置相同的互斥對象,該線程將會停下來,直到前一個線程(或進程)釋放該互斥對象為止。注意它可以由不同應用程序共享。使用方法如下:
//在窗體創建中
hMutex:=CreateMutex(nil,false,nil)
//在窗體銷毀中
CloseHandle(hMutex)
//在線程中
WaitForSingleObject(hMutex,INFINITE)
……保護的代碼
ReleaseMutex(hMutex)
3. Semaphore(信號量),它與互斥對象相似,但它可以計數。例如可以允許一個給定資源同時同時被三個線程訪問。其實Mutex就是最大計數為一的Semaphore。使用方法如下:
//在窗體創建中
hSemaphore:= CreateSemaphore(nil,lInitialCount,lMaximumCount,lpName)
//在窗體銷毀中
CloseHandle(hSemaphore)
//在線程中
WaitForSingleObject(hSemaphore,INFINITE)
……保護的代碼 與50位技術專家面對面20年技術見證,附贈技術全景圖
1. Critical Sections(臨界段),源代碼中如果有不能由兩個或兩個以上線程同時執行的部分,可以用臨界段來使這部分的代碼執行串行化。它只能在一個獨立的進程或一個獨立的應用程序中使用。使用方法如下:
//在窗體創建中
InitializeCriticalSection(Critical1)
//在窗體銷毀中
DeleteCriticalSection(Critical1)
//在線程中
EnterCriticalSection(Critical1)
……保護的代碼
LeaveCriticalSection(Critical1)
2. Mutex(互斥對象),是用于串行化訪問資源的全局對象。我們首先設置互斥對象,然后訪問資源,最后釋放互斥對象。在設置互斥對象時,如果另一個線程(或進程)試圖設置相同的互斥對象,該線程將會停下來,直到前一個線程(或進程)釋放該互斥對象為止。注意它可以由不同應用程序共享。使用方法如下:
//在窗體創建中
hMutex:=CreateMutex(nil,false,nil)
//在窗體銷毀中
CloseHandle(hMutex)
//在線程中
WaitForSingleObject(hMutex,INFINITE)
……保護的代碼
ReleaseMutex(hMutex)
3. Semaphore(信號量),它與互斥對象相似,但它可以計數。例如可以允許一個給定資源同時同時被三個線程訪問。其實Mutex就是最大計數為一的Semaphore。使用方法如下:
//在窗體創建中
hSemaphore:= CreateSemaphore(nil,lInitialCount,lMaximumCount,lpName)
//在窗體銷毀中
CloseHandle(hSemaphore)
//在線程中
WaitForSingleObject(hSemaphore,INFINITE)
……保護的代碼 與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的线程同步机制有临界区、互斥、信号量优缺点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++的clone函数什么时候需要重载
- 下一篇: extern相关问题