執行緒間同步機制的總結

2021-08-07 06:14:35 字數 1072 閱讀 7483

多執行緒共享同乙個程序的位址空間

優點:執行緒間較容易實現通訊,通過全域性變數實現資料共享和交換,

缺點:多個執行緒同時訪問共享資源容易出現資源競爭,所以要引入同步和互斥機制。

執行緒間同步:無名訊號量,互斥鎖,事件,臨界區;(後兩個用的較少)

無名訊號量:實現同步的機制步驟

(1)定義全域性變數sem_t sem1,sem2;

(2)在程序中初始化訊號量:int sem_init(sem_t *sem,int pshared,int value);

(3)進行p操作:int sem_wait(sem_t * sem);//訊號量減一

(4)進行v操作:int sem_post(sem_t * sem);//訊號量加一

注意:在這裡可以使用乙個訊號量實現互斥鎖;

互斥鎖: 實現同步機制的步驟

(1)定義全域性變數 pthread_mutex_t mutex;

(2) 初始化互斥鎖 int pthread_mutex_init(pthread_mutex_t * mutex,pthread_mutexattr_t *attr);

函式引數 mutex :互斥鎖

attr : 互斥鎖屬性 //null表示預設屬性

(3) 申請互斥鎖 int pthread_mutex_lock(pthread_mutex_t * mutex);

函式引數 mutex

函式返回值 成功 0,出錯 -1

(4) 釋放互斥鎖 int pthread_mutex_unlock(pthread_mutex_t * mutex);

函式引數 mutex

函式返回值 成功 0,出錯 -1

無名訊號量和互斥鎖的例項可以訪問這篇部落格

事件:事件機制,則允許乙個執行緒在處理完乙個任務後,主動喚醒另外乙個執行緒執行任務。

臨界區:當多個執行緒訪問乙個獨占性共享資源時,可以使用臨界區物件。

擁有臨界區的執行緒可以訪問被保護起來的資源或**段,其他執行緒若想訪問,

則被掛起,直到擁有臨界區的執行緒放棄臨界區為止

更多關於事件和臨界區的知識可以訪問下面這篇部落格

程序 執行緒間同步機制。

一 程序 執行緒間同步機制。臨界區 互斥區 事件 訊號量四種方式 臨界區 critical section 互斥量 mutex 訊號量 semaphore 事件 event 的區別 1 臨界區 通過對多執行緒的序列化來訪問公共資源或一段 速度快,適合控制資料訪問。在任意時刻只允許乙個執行緒對共享資源...

執行緒間同步機制 互斥鎖

互斥以排他方式防止共享資料被併發修改。互斥量從本質來說是一把鎖,是乙個二元變數,其狀態為開鎖 允許0 和上鎖 禁止1 在訪問共享資源前對互斥量進行設定 加鎖 在訪問完成後釋放 解鎖 互斥量。1 在訪問該資源前,首先申請該互斥鎖,如果該互斥鎖處於開鎖狀態,則申請到該鎖物件,並立即占有該鎖 使該鎖處於鎖...

執行緒同步機制

本週主要學習 執行緒同步機制 互斥量 讀寫鎖和條件變數 和簡單程式的實現,對執行緒同步有了進一步認識 內容如下 執行緒的基本概念,相關函式 互斥量 說明 處於標圓形框之上的線段表示相關的執行緒沒有擁有互斥量 處於圓形框中心線之上的線段表示相關的執行緒等待互斥量 處於圓形框中心線之下的線段表示相關的執...