同步概念
同步,指對在一個系統中所發生的事件之間進行協調,在時間上出現一致性與統一化的現象,
但是,對于不同行業,對于同步的理解略有不同,比如:設備同步,是指在兩個設備之間規定一個共同的時間參考;資料庫同步,是指讓兩個或多個資料庫內容保持一致,或者按需要部分保持一致;檔案同步,是指讓兩個或多個檔案夾里的檔案保持一致,等等,
但是,在軟體編程或者通信行業中所說的同步與生活中大家印象中的同步概念略有差異,“同”字應是指協同、協助、互相配合,主旨在協同步調,按預定的先后次序運行,注意,這里是指按照預定次序執行,而不是同時執行,
執行緒同步
執行緒同步,指一個執行緒發出某一功能呼叫時,在沒有得到結果之前,該呼叫不回傳,同時其它執行緒為保證資料一致性,不能呼叫該功能,
例子: 記憶體中開辟了100位元組的空間,現在,執行緒T1欲填入全1,執行緒T2欲填入全0,但如果T1執行了填充50個位元組全1后失去cpu,輪到T2執行,T2將從頭開始在記憶體里填充全0,那么他將會將T1寫過的內容覆寫,當T2時間片使用完畢之后,T1再次獲得cpu繼續從失去cpu的位置向后寫入1,當他執行結束后,記憶體中的100位元組,既不是全1,也不是全0,如下圖示:
產生的這種現象叫做“與時間有關的錯誤”(time related),為了避免這種資料混亂,執行緒需要進行同步,
“同步”的目的,是為了避免資料混亂,解決與時間有關的錯誤,實際上,不僅執行緒間需要同步,行程間、信號間等等都需要同步機制,
因此,所有“多個控制流,共同操作一個共享資源”的情況,都需要同步,
由以上分析可知,造成資料混亂原因有以下三個:
- 資源共享(獨享資源則不會)
. 調度隨機(意味著資料訪問會出現競爭) - 執行緒間缺乏必要的同步機制,
那如何避免這種資料混亂的情況呢?我們可以從造成資料混亂的三個原因入手,
以上3點中,前兩點我們是無法改變的,因為在linux系統中,想要提高效率,傳遞資料,資源必須共享,只要共享資源,就一定會出現競爭,只要存在競爭關系,資料就很容易出現混亂,
所以只能從第三點著手解決,為了避免資料混亂,應該使多個執行緒在訪問共享資源的時候,出現互斥,也就是說,當某個行程訪問共享資源時,其它行程就無法該資源,直到該行程放棄這個資源,在linux環境下,有信號量、互斥量、條件變數等方式實作執行緒間同步,在后續的博文中,將依次介紹這些內容,
更多精彩內容,請關注公眾號良許Linux,公眾內回復1024可免費獲得5T技術資料,包括:Linux,C/C++,Python,樹莓派,嵌入式,Java,人工智能,等等,公眾號內回復進群,邀請您進高手如云技術交流群,
公眾號:良許Linux
有識訓?希望老鐵們來個三連擊,給更多的人看到這篇文章
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/174978.html
標籤:Linux
