Linux多執行緒 執行緒同步

2021-09-22 22:31:31 字數 865 閱讀 2833

執行緒同步的概念:即當有乙個執行緒在對記憶體進行操作時,其他執行緒都不可以對這個記憶體位址進行操作,直到該執行緒完成操作, 其他執行緒才能對該記憶體位址進行操作,而其他執行緒又處於等待狀態。

在一般情況下,建立乙個執行緒是不能提高程式的執行效率的,所以要建立多個執行緒。但是多個執行緒同時執行的時候可能呼叫執行緒函式,在多個執行緒同時對同乙個記憶體位址進行寫入,由於cpu時間排程上的問題,寫入資料會被多次的覆蓋,所以就要使執行緒同步。

同步就是協同步調,按預定的先後次序進行執行。如:你說完,我再說。

如程序、執行緒同步,可理解為程序或執行緒a和b一塊配合,a執行到一定程度時要依靠b的某個結果,於是停下來,示意b執行;b依言執行,再將結果給a;a再繼續操作。

所謂同步,就是在發出乙個功能呼叫時,在沒有得到結果之前,該呼叫就不返回,同時其它執行緒也不能呼叫這個方法。按照這個定義,其實絕大多數函式都是同步呼叫(例如sin, isdigit等)。但是一般而言,我們在說同步、非同步的時候,特指那些需要其他部件協作或者需要一定時間完成的任務。例如window api函式sendmessage。該函式傳送乙個訊息給某個視窗,在對方處理完訊息之前,這個函式不返回。當對方處理完畢以後,該函式才把訊息處理函式所返回的lresult值返回給呼叫者。

在多執行緒程式設計裡面,一些敏感資料不允許被多個執行緒同時訪問,此時就使用同步訪問技術,保證資料在任何時刻,最多有乙個執行緒訪問,以保證資料的完整性。

執行緒有可能和其他執行緒共享一些資源,比如,記憶體,檔案,資料庫等。

當多個執行緒同時讀寫同乙份共享資源的時候,可能會引起衝突。這時候,我們需要引入執行緒「同步」機制,即各位執行緒之間要有個先來後到,不能一窩蜂擠上去搶作一團。

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

Linux多執行緒,執行緒同步

5 執行緒私有資料 程序內的所有執行緒共享程序的資料空間,因此全域性變數為所有執行緒所共有。但有時執行緒也需要儲存自己的私有資料,這時可以建立執行緒私有資料 thread specific date tsd 來解決。例如我們常見的變數 errno 它返回標準的出錯資訊。它顯然不能是乙個區域性變數,幾...

3 Linux多執行緒,執行緒同步

5 執行緒私有資料 程序內的所有執行緒共享程序的資料空間,因此全域性變數為所有執行緒所共有。但有時執行緒也需要儲存自己的私有資料,這時可以建立執行緒私有資料 thread specific date tsd 來解決。例如我們常見的變數 errno 它返回標準的出錯資訊。它顯然不能是乙個區域性變數,幾...

Linux多執行緒程式設計(2)執行緒同步

執行緒同步 a.mutex 互斥量 多個執行緒同時訪問共享資料時可能會衝突,這跟前面講訊號時所說的可重要性是同樣的問 題。假如 兩個執行緒都要把某個全域性變數增加1,這個操作在某平台需要三條指令完成 1.從記憶體讀變數值到暫存器 2.暫存器的值加1 3.將暫存器的值寫回記憶體 我們通過乙個簡單的程式...