windows中的進程間同步

來源:互聯網
上載者:User

今天,翻開《MFCwindows程式設計》,耐心看完了這一章,所以寫點東西,以備後面使用。

 

多線程的同步:

1.       臨界區

       只能同步同一個進程的線程之間的同步,因為臨界區不能跨越進程的邊界工作。也是因為臨界區沒有name,所以不能跨進程使用。

       訪問臨界區之前進行鎖定,訪問後進行解鎖

如果進程B訪問進程A鎖定的臨界區,那麼進程B會被阻塞,直到線程A釋放臨界區,線程B才可以運行。線上程B進行阻塞期間,不佔用CPU時間.

2.       互斥量

       可以同步在相同進程,或不同進程間的線程進行同步。所以互斥量是有name的,可以跨進程使用。

互斥量與臨界區的區別,如果一個線程鎖定了臨界區,而終止時沒有解除臨界區的鎖定,那麼等待臨界區閒置其他線程將無限期的阻塞下去。然而,如果鎖定互斥量的線程不能在其終止前解除互斥量的鎖定,那麼系統將認為互斥量被“放棄”了並自動釋放該互斥量,這樣等待進程就可以繼續執行了。

3.       事件

       在任何特定時間,事件只能處在兩種狀態的一種:引發(設定)或者調低(重設)。設定可以任務是出於訊號狀態,重設事件可以認為是出於非訊號狀態。

       事件也被描述為“線程觸發器”。事件也不能跨進程。同樣它沒有name。

事件有自動化佈建事件和手動設定事件。其差別是當自動化佈建事件上阻塞的線程被喚醒時,該事件別自動化佈建為訊號狀態。手動設定事件不能自動重設,它必須使用編程的方式重設。

l         如果事件只觸發一個線程,那麼使用自動化佈建事件和使用SetEvent喚醒等待線程。

       這裡不需要調用ResetEvent,因為線程被喚醒的那一刻事件將被自動重設。

l         如果事件將觸發兩個或者多個線程,那麼使用手動設定線程和使用PulseEvent喚醒所以的等待線程。而且,您不需要調用ResetEvent,因為PluseEvent在喚醒所有等待線程後為你重設事件。

4.       訊號量

       首先,訊號量可以同步不同進程,相同進程中的線程。

       其次,訊號量跟其他3種同步機制不同的是,上面3種的同步機制的特性“要沒有,要麼沒有”,訊號量則不同,它始終代表可用資源的數量。鎖定訊號量會減少資源數,釋放訊號量則增加資源數。只有在資源數為0的時候,線程才會被阻塞。

引用:http://blog.csdn.net/renjwjx/article/details/3917407

今天,翻開《MFCwindows程式設計》,耐心看完了這一章,所以寫點東西,以備後面使用。

 

多線程的同步:

1.       臨界區

       只能同步同一個進程的線程之間的同步,因為臨界區不能跨越進程的邊界工作。也是因為臨界區沒有name,所以不能跨進程使用。

       訪問臨界區之前進行鎖定,訪問後進行解鎖

如果進程B訪問進程A鎖定的臨界區,那麼進程B會被阻塞,直到線程A釋放臨界區,線程B才可以運行。線上程B進行阻塞期間,不佔用CPU時間.

2.       互斥量

       可以同步在相同進程,或不同進程間的線程進行同步。所以互斥量是有name的,可以跨進程使用。

互斥量與臨界區的區別,如果一個線程鎖定了臨界區,而終止時沒有解除臨界區的鎖定,那麼等待臨界區閒置其他線程將無限期的阻塞下去。然而,如果鎖定互斥量的線程不能在其終止前解除互斥量的鎖定,那麼系統將認為互斥量被“放棄”了並自動釋放該互斥量,這樣等待進程就可以繼續執行了。

3.       事件

       在任何特定時間,事件只能處在兩種狀態的一種:引發(設定)或者調低(重設)。設定可以任務是出於訊號狀態,重設事件可以認為是出於非訊號狀態。

       事件也被描述為“線程觸發器”。事件也不能跨進程。同樣它沒有name。

事件有自動化佈建事件和手動設定事件。其差別是當自動化佈建事件上阻塞的線程被喚醒時,該事件別自動化佈建為訊號狀態。手動設定事件不能自動重設,它必須使用編程的方式重設。

l         如果事件只觸發一個線程,那麼使用自動化佈建事件和使用SetEvent喚醒等待線程。

       這裡不需要調用ResetEvent,因為線程被喚醒的那一刻事件將被自動重設。

l         如果事件將觸發兩個或者多個線程,那麼使用手動設定線程和使用PulseEvent喚醒所以的等待線程。而且,您不需要調用ResetEvent,因為PluseEvent在喚醒所有等待線程後為你重設事件。

4.       訊號量

       首先,訊號量可以同步不同進程,相同進程中的線程。

       其次,訊號量跟其他3種同步機制不同的是,上面3種的同步機制的特性“要沒有,要麼沒有”,訊號量則不同,它始終代表可用資源的數量。鎖定訊號量會減少資源數,釋放訊號量則增加資源數。只有在資源數為0的時候,線程才會被阻塞。

引用:http://blog.csdn.net/renjwjx/article/details/3917407

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.