執行緒同步的使用(synchronized)

2021-07-09 05:56:07 字數 1195 閱讀 8735

執行緒同步結論:當多個執行緒共同修改同乙個資源時使用執行緒同步,乙個資源使用乙個同步鎖,盡量縮小同步塊內的**。

執行緒同步:執行緒同步的真實意思,其實是「排隊」:幾個執行緒之間要排隊,乙個乙個對共享資源進行操作,而不是同時進行操作。

你不一定要把同步鎖宣告為static或者public,但是你一定要保證相關的同步**之間,一定要使用同乙個同步鎖。

同步鎖:任何乙個object reference都可以作為同步鎖。我們可以把object reference理解為物件在記憶體分配系統中的記憶體位址。因此,要保證同步**段之間使用的是同乙個同步鎖,我們就要保證這些同步**段的 synchronized關鍵字使用的是同乙個object reference,同乙個記憶體位址。這也是為什麼我在前面的**中宣告lock1的時候,使用了final關鍵字,這就是為了保證lock1的 object reference在整個系統執行過程中都保持不變

public static final object lock1 = new object(); 

同步形式:

f1()  

synchronizedf2()  } 

如果有10個執行緒同時執行**段a,同時還有20個執行緒同時執行**段b,那麼這30個執行緒之間都是要進行同步的。 

這30個執行緒都要競爭乙個同步鎖lock1。同一時刻,只有乙個執行緒能夠獲得lock1的所有權,只有乙個執行緒可以執行**段a或者**段b。其他競爭失敗的執行緒只能暫停執行,進入到該同步鎖的就緒(ready)佇列

但是,我們要盡量避免這種直接把synchronized加在函式定義上的偷懶做法。因為我們要控制同步粒度。同步的**段越小越好。

synchronized控制的範圍越小越好。 

而且如果還有f3,f4 訪問的resource2 則可以新建乙個鎖lock2,這樣,f1()和f2()就會競爭lock1,而f3()和f4()就會競爭lock2。這樣,分開來分別競爭兩個鎖,就可以大大較少同步鎖競爭的概率,從而減少系統的開銷。 

使用Event同步執行緒

win32寫多執行緒的時候經常需要執行緒同步,同步的方法很多,效率也不一樣,這裡介紹一種event同步物件。建立乙個mfc基於dialog的工程,介面如圖 執行緒部分 全部為全域性變數和函式 const int max thread 3 handle hevent null handle to ev...

執行緒同步 讀寫鎖的使用

特別重要12字 寫獨佔,讀共享 寫鎖優先順序高 主要應用函式 1 pthread rwlock init 初始化 2 pthread rwlock rdlock 讀鎖 3 pthread rwlock wrlock 寫鎖 4 pthread rwlock tryrdlock try寫鎖 5 pthr...

同步 執行緒同步

操作執行的先後順序。同步指兩個或兩個以上隨時間變化的量在變化過程中保持一定的相對關係。同步 英語 synchronization 指對在乙個系統中所發生的事件 event 之間進行協調,在時間上出現一致性與統一化的現象。在系統中進行同步,也被稱為及時 in time 同步化的 synchronous...