學習筆記 執行緒間同步

2021-06-26 00:04:55 字數 1188 閱讀 8069

執行緒間同步,需要等待。等待對於同步的重要性是不言而喻的。

考慮乙個工廠的流水線,假設工序1和工序2沒有關聯,那麼找兩個工人各幹的就可以,這兩個工人都可以不認識對方。

現在考慮的重點是工序1和工序2有關聯。那麼兩個工序就需要某種形式的溝通和同步。

第一種情況:工序1進行到某個時間點時,需要工序2結束。

1)工序1暫停,在工序1上幹活的工人可以暫時離開這個工序,去休息,或去別的地方幫忙。

2)工序2加緊趕工。

3)工序2完成。

4)經理通知工序1繼續,指派乙個工人去做工序1。

這種同步的特點是:

1)工序1停工等待(join())。

2)當工序1繼續時(從join()呼叫返回),工序2在的事情已經完成。

4)工序2的工作完整成果對工序1可見。

第二中情況:工序1和工序2需要獨佔乙個公共資源,比如去原料倉庫取貨。

1)工序2的工人(他代表工序2)來到倉庫取貨,管理員讓他進入拿貨,清點,並作登記。

2)工序1的工人知道倉庫一次只能去乙個人,就坐在那裡等待(或去其它地方幫忙),實際上等同於工序1暫停了。

3)工序2的工人取貨回來。

4)工序1的工人才能去倉庫取貨。

這種同步的特點是:

1)工序1進入倉庫(lock())這個過程很長,可能會長時間等待,甚至可能要排隊。

2)工序2的倉庫中出來(unlock()),工序1才能完成進入倉庫事件(lock())。

3)工序2.拿料事件e發生在工序2.離開倉庫事件之前,工序1.拿料事件f發生在工序1.進入倉庫事件之後

5)工序2在倉庫中的所有活動結果對工序1可見。例如:工序1的人可以看到,工序2的人拿走一大半原料,因此影響到自己只能拿很少的原料了。

第三種情況:工序1和工序2需要某種「快速的「完成通知。

1)工序1的人不停的盯著乙個指示燈

2)工序2的人把生產出的半成品放入堆放區

3)工序2的人點亮指示燈

4)工序1的突然注意到指示燈亮了

5)工序1的人去堆放區取出半成品

這種同步的特點是:

1)工序1的人要經常盯著指示燈

2)工序1的人可以不停工

3)工序2中,事件順序為:半成品製作->推送到堆方區->開啟指示燈

4)工序1中,事件順序為:發現指示燈亮->從堆放區取東西->處理半成品

執行緒間同步

1.臨界區 當多個執行緒訪問乙個獨占性共享資源時,可以使用臨界區物件。擁有臨界區的執行緒可以訪問被保護起來的資源或 段,其他執行緒若想訪問,則被掛起,直到擁有臨界區的執行緒放棄臨界區為止。2.原子操作原理 單cpu可以暫時遮蔽全部中斷,多cpu通過指令來保證同一時刻只有乙個cpu對其進行操作 1.事...

程序執行緒間同步

一 posix訊息佇列 通過固定名稱來建立和引用訊息佇列 1.可以認為是乙個訊息鍊錶,有足夠的許可權的執行緒可以往佇列中放置和獲取訊息。2.可指定優先順序 在空佇列放置訊息時候能夠產生乙個訊號或啟動乙個執行緒 3.建立訊息佇列mq open mq close 關閉 並不刪除 mq unlink 刪除...

執行緒間的同步

因為之前對執行緒的同步不是很清晰,並且也沒有怎麼重視,其實就是懶得動手,正好現在沒事所以練習一下。首先用到的幾個函式 handle hthread createthread null,0,fun,null,0,null 建立執行緒 fun的實現在下面貼出來 hmutex createmutex nu...