(1) 任務同步——相互合作關係(直接相互制約的關係)
(1)程式設計中存在這樣的情況:多個執行緒都要訪問臨界資源又要相互合作(執行緒間同時存在互斥關係和同步關係)
(2) 執行緒a 先執行某操作(例如 對全域性變數x 的修改) 後,執行緒b才能(根據變數x 的值判斷)執行另一操作(可能是 對全域性變數x 的修改) ,該如何實現?
(1)定義( 條件變數( pthread_cond_t型別 ), 定義互斥量變數
(2)初始化 條件變數,初始化互斥量
(3) 觸發條件執行緒x
(4) 等待條件執行緒y:等待條件變數
(5)銷毀條件變數,銷毀互斥量變數
(1)靜態初始化
pthread_cond_t cond = pthread_cond_initializer;
(2)動態初始化
函式原型
標頭檔案:pthread.h
int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *attr)
;引數和返回值:
cond:條件變數
attr:條件變數屬性,若為null,則使用預設屬性
成功返回0;出錯返回錯誤碼
(3)條件變數的銷毀
include
int pthread_cond_destroy(pthread_cond_t * cond)
;引數和返回值:
cond:條件變數
成功返回0;出錯返回錯誤碼
(4)等待條件變數
函式原型
標頭檔案:pthread.h
int pthread_cond_wait(pthread_cond_t *cond,
pthread_mutex_t *mutex)
;引數與返回值
cond:條件變數
mutex:互斥量
成功返回0;出錯返回錯誤碼
(1)臨界區:條件變數的使用場景伴隨共享資源的使用,例如全域性變數
(2)多個執行緒等待條件變數:在呼叫pthread_cond_wait前,需要使互斥量處於加鎖狀態,這樣可以通過原子操作的方式,將呼叫執行緒放到該條件變數等待執行緒佇列(臨界資源)中
(1)呼叫pthread_mutex_lock
呼叫pthread_cond_wait
呼叫pthread_mutex_unlock
(2)呼叫pthread_cond_wait 函式後核心自動執行的操作:
若條件變數被其他執行緒觸發,在該執行緒被喚醒後,呼叫pthread_mutex_lock
(1)pthread_cond_signal 和pthread_cond_broadcast可以觸發條件變數並喚醒等待條件變數的執行緒
(2)
函式原型
include< pthread.h>
int pthread_cond_signal(pthread_cond_t *cond)
;int pthread_cond_broadcast(pthread_cond_t *cond);
引數與返回值:
cond:條件變數
成功返回0;出錯返回錯誤碼
/*1
.**未驗證,主要是學習條件變數和互斥量的用法,看懂很重要*/
pthread_mutex_t count_lock;
//宣告條件變數和互斥量
pthread_cond_t count_ready;
int main()/
*1.increment_count執行緒,和decrement_count執行緒優先順序相同,increment_count執行緒會執行完畢,直到釋放掉互斥量*/
void *decrement_count(void *arg)
void *increment_count(void *arg)
執行緒同步機制
本週主要學習 執行緒同步機制 互斥量 讀寫鎖和條件變數 和簡單程式的實現,對執行緒同步有了進一步認識 內容如下 執行緒的基本概念,相關函式 互斥量 說明 處於標圓形框之上的線段表示相關的執行緒沒有擁有互斥量 處於圓形框中心線之上的線段表示相關的執行緒等待互斥量 處於圓形框中心線之下的線段表示相關的執...
執行緒同步機制
執行緒同步主要用於協調對臨界資源的訪問,臨界資源可以是硬體裝置 比如印表機 磁碟 檔案 記憶體 變數 陣列 佇列等 執行緒同步有4種機制 他們的主要區別在於 各同步機制詳細的功能說明如下 臨界區臨界區是一段獨佔對某些共享資源訪問的 在任意時刻只允許乙個執行緒對共享資源進行訪問。如果有多個執行緒試圖同...
執行緒同步機制
執行緒同步的四種機制 主要區別在於 適用範圍 臨界區在使用者模式下,不會發生使用者態到核心態的切換,只能用於同程序內線程間同步。其他會導致使用者態到核心態的切換,利用核心物件實現,可用於不同程序間的執行緒同步。效能 臨界區效能較好,一般只需要數個cpu週期。其他機制效能相對較差,一般需要數十個cpu...