多執行緒共享同乙個程序的位址空間
優點:執行緒間較容易實現通訊,通過全域性變數實現資料共享和交換,
缺點:多個執行緒同時訪問共享資源容易出現資源競爭,所以要引入同步和互斥機制。
執行緒間同步:無名訊號量,互斥鎖,事件,臨界區;(後兩個用的較少)
無名訊號量:實現同步的機制步驟
(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 在訪問該資源前,首先申請該互斥鎖,如果該互斥鎖處於開鎖狀態,則申請到該鎖物件,並立即占有該鎖 使該鎖處於鎖...
執行緒同步機制
本週主要學習 執行緒同步機制 互斥量 讀寫鎖和條件變數 和簡單程式的實現,對執行緒同步有了進一步認識 內容如下 執行緒的基本概念,相關函式 互斥量 說明 處於標圓形框之上的線段表示相關的執行緒沒有擁有互斥量 處於圓形框中心線之上的線段表示相關的執行緒等待互斥量 處於圓形框中心線之下的線段表示相關的執...