windows多線程同步總結

來源:互聯網
上載者:User

標籤:

1.多線程同步與多線程互斥的關係

其實這也是我一直困擾的問題,在這裡我只是說說我的理解。

我的理解是多線程互斥是針對於多線程資源而言的。

而多線程同步是針對於多線程時序問題。

由於線程的並發性導致其已耗用時間的不確定性,所以我們需要

控制多個線程的協同工作。

 

還是舉賣票的例子來區別互斥和同步的區別吧:

比如我們有兩個視窗進行賣票,當然這裡就需要一個全域變數

來計數當前賣了第幾張票了,最重要的是一張票不能賣出去兩次,

所以當視窗1在賣第N張票的時候,視窗2應該就不能賣第N張票,

否則當不進行互斥的時候,兩個視窗就可能出現賣出去同一張票。

所以兩個賣票的視窗賣票的過程是一個互斥的過程。

 

對於同步,我們可以舉這樣一個賣票的例子,當有兩個賣票的視窗

交替的進行賣票。每個視窗買一個小時。那麼當第一個視窗賣了一個

小時之後告訴第二個視窗你該開始賣了,當第二個視窗賣了一個小時後

又會通知第一個視窗你別休息了快繼續賣票了。當然我們不難發現在這一過程

中自然的包含了互斥的過程,因為當第一個視窗賣過的票第二個視窗

是不能再賣的

 

不知道我說清楚沒有,我的感覺了線程同步的過程其實就包含了線程互斥。

線程互斥是一種特殊的線程同步情況。

 

 

2.關鍵區,互斥對象,事件對象,訊號量的總結

關鍵區:

CRITICALSECTION cs;建立關鍵區對象

InitializeCriticalSection(&cs);初始化關鍵區

EnterCriticalSection(&cs);進入關鍵區

LeaveCriticalSection(&cs);離開關鍵區

 

互斥對象:

HANDLE Mu;定義互斥對象

Mu=CreateMutex(.....);建立互斥對象

WaitSingleObject();等待互斥對象啟用

ReleaseMutex();釋放互斥對象的所有權

 

事件對象:

HANDLE Event;定義事件對象

Event=CreateEvent();建立事件對象

WaitSingleObject();等待事件對象啟用

ResetEvent();設定事件對象為無訊號

SetEvent();設定事件對象為有訊號

 

訊號量:

HANDLE  sem;定義訊號量事件

sem=CreateSemaphore();建立訊號量事件

WaitSingleObject();等待事件對象啟用

ReleaseSemaphore();訊號量對象計數加1

 

3.對於這種線程同步方式的區別:

1.關鍵區屬於使用者態對象,而其他三種是核心態的對象。

   所以使用關鍵區的效率較其他三種高,因為其他三種在使用的時候、

   會進入核心態

2.關鍵區和互斥對象類似,主要解決資源的互斥訪問。而關鍵區僅能用於

    線程同步,而互斥對象可以用於進程同步

3.事件對象主要用於線程的時序同步,比如一個線程結束了通知另外一個線程工作

4.而訊號量主要用於生產者消費者問題。比如,廚房有四個碗,但是這時候有

    10個人要吃飯,那麼在同一時刻最多隻能由四個人同時吃飯。此時可把

    訊號量對象的計數最大值設為4.

 

4.關於CreateThread()和_beginthread()函數的區別:

參考MoreWindows大神的博文:http://blog.csdn.net/morewindows/article/details/7421759

用一句話說起區別就是:CreateThread()建立的線程沒有考慮調用C運行庫函數導致的資料覆蓋問題

而_beginthread()在建立的時候自動為每個線程維護一塊記憶體供有需要的C運行庫函數。然而在底層

_beginthread()實際上仍然是調用Createthread()

 

 

5.關於CreateThread()建立線程會執行兩次:

最好在調用的時候不立即執行線程,設為為CREATE_SUSPEND

然後再ResumeThread()即可

 

windows多線程同步總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.