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