互斥鎖是多執行緒同步的一種方式,當多個執行緒訪問同乙個變數時,最簡單的方法就是使用乙個互斥鎖(mutex)保護這個共享變數,防止出現資源搶占的問題。
下面是未加互斥鎖時:
#include#includepthread_mutex_t mutex=pthread_mutex_initializer; //靜態初始化鎖
int n=0; //共享變數
void* func1(void *arg)
pthread_exit(null);
}void* func2(void *arg)
pthread_exit(null);
}int main()
輸出結果:
可以看到,16以後輸出了3,並未按照預想的順序輸出。
加鎖後的輸出:
輸出符合預期,沒有出現資源搶占的現象。在for迴圈中頻繁的加鎖與解鎖是不合理的,但是此處是為了測試多執行緒的資源搶占問題,可以暫時忽略效率。
接下來總結一下多執行緒另一種同步方式-條件變數的使用。
linux執行緒》同步互斥機制之 互斥鎖
本文基於訊號量 如果訊號量的值最多為1,那實際上相當於乙個共享資源在任意時刻最多只能有乙個執行緒在訪問,這樣的邏輯稱為 互斥 這時,有一種更加方便和語義更加準確的工具來滿足這種邏輯 互斥鎖。幾個執行緒同時去搶乙個鎖,誰搶到了鎖就進門把房間鎖上,訪問資料,出來後之前解鎖。照這樣的邏輯,互斥鎖的操作無非...
執行緒同步之互斥鎖
為什麼要執行緒同步?當多執行緒共享相同的記憶體的時候,需要每乙個執行緒看到相同的檢視。當乙個執行緒被修改時,其他的執行緒也可以修改或者讀取這個變數,所以就需要對這些執行緒同步,保證不會訪問到無效的變數。舉個例子 由此可見,執行緒同步的重要性。執行緒同步之互斥鎖的函式 1.include 2.int ...
linux 執行緒同步問題之互斥鎖
執行緒的特點是乙個輕量級的,所有的執行緒共享相同的資源,這樣一來就產生了問題,多執行緒如何來同步的合理的使用這些資源呢?在linux中提供了三種形式的同步模式,互斥鎖,訊號量,互斥變數三種模型來解決該問題。下來就簡單介紹這幾種情況 1 互斥鎖 mutex 利用互斥鎖來進行執行緒的同步,讓每個執行緒在...