執行緒同步,即為多個執行緒在操作同乙個公共資料區域時,能保持資料的一致性,看下面**:
#include
#include
#include
int num =
100;
void
*mythread
(void
* p)
}int
main()
pthread_join
(t1,
null);
return0;
}
我們希望的結果是主線程中輸出num和t1執行緒中的num是不一樣的,同時在乙個while的結構體中,num應該是一樣的,那麼,看下面的輸出結果:
這個結果並不是我們想要的輸出。
要正確輸出結果,需要在運算元據加上鎖,只有拿到鎖的執行緒才能對公共資料進行操作。
先說一下互斥鎖,主要操作函式有:
pthread_mutex_init //初始化互斥鎖
pthread_mutex_destroy //銷毀鎖
pthread_mutex_lock //加鎖
pthread_mutex_trylock //加鎖
pthread_mutex_unlock //解鎖
以上5個函式返回值都是:成功返回0,失敗返回錯誤號。
再者,pthread_mutex_t型別,其本質是乙個結構體,為簡化理解,應用可忽略其實現細節,簡單單程整數看待。
pthread_mutex_t mutex: 變數mutex只有兩種取值1,0
那麼,我們在操作公共區域加鎖,**如下:
#include
#include
#include
pthread_mutex_t lock;
int num =
100;
void
*mythread
(void
* p)
}int
main()
pthread_join
(t1,
null);
pthread_mutex_destroy
(&lock)
;return0;
}
執行結果如下:
從上面結果看,主線性和子執行緒,要在拿到鎖之後才進行資料操作,這樣就保證了資料同步。
Linux 執行緒同步 互斥量(互斥鎖)
1 執行緒同步的目的是不管執行緒之間的執行如何穿插,其執行結果都是正確的。即保證多執行緒執行下結果的確定性。2 同步就是讓所有執行緒按照一定的規則執行,使得其正確性和效率都有跡可循,即執行緒同步就是對執行緒之間的穿插進行控制。3 每個物件都對應於乙個 互斥鎖 的標記,這個標記用來保證在任一時刻,只能...
Linux多執行緒同步 互斥鎖
當多個執行緒對同乙個資源進行訪問的時候,為了這個資源的安全性,我們需要對這個資源進行鎖定,規定同一時間只有乙個資源能夠獲得該鎖的鑰匙,其它執行緒要獲得該資源需要等待該執行緒 互斥鎖建立 pthread mutex t mutex 互斥鎖初始化 mutex pthread mutex initiali...
Linux 執行緒同步方法 互斥鎖
在單執行緒條件下,由於對資料操作,在同樣的時間下,只有乙個執行緒來操作。所以不用擔心資料的同步問題。現代的作業系統,大都提供併發機制,雖然有時候是表面的併發。在 linux 中,併發用的最多的是基於執行緒的併發,程序的代價太高了,這樣,乙個共享的資料,在同一時間內,可能有多個執行緒在操作。如果沒有同...