執行緒的特點是乙個輕量級的,所有的執行緒共享相同的資源,這樣一來就產生了問題,多執行緒如何來同步的合理的使用這些資源呢?在linux中提供了三種形式的同步模式,互斥鎖,訊號量,互斥變數三種模型來解決該問題。下來就簡單介紹這幾種情況:
<1>互斥鎖(mutex)
利用互斥鎖來進行執行緒的同步,讓每個執行緒在某個時間只能讓乙個執行緒使用該資源,用完之後釋放該資源,供給其他執行緒使用。如下所示:互斥鎖的方法介紹:
初始化互斥鎖:
int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);
mutex:該引數為pthread_mutex_t mutex
變數,該變數的初始化有兩種方式,一種是呼叫如上方法,另一種方式是靜態初始化
如下:pthread_mutex_t mutex=pthread_mutex_initialier
;attr:該引數的取值如下:
pthread_mutex_timed_np:其餘執行緒等待佇列
pthread_mutex_recursive_np:巢狀鎖
,允許執行緒多次加鎖
,不同執行緒
,解鎖後重新競爭
pthread_mutex_errorcheck_np:檢錯
,與一同
,執行緒請求已用鎖,返回
edeadlk;
pthread_mutex_adaptive_np:適應鎖
,解鎖後重新競爭
銷毀互斥鎖
int pthread_mutex_destroy(pthread_mutex_t *mutex);
加鎖和解鎖
int pthread_mutex_lock(pthread_mutex_t *mutex); //直接加鎖
int pthread_mutex_trylock(pthread_mutex_t *mutex); //嘗試加鎖,但不一定成功
int pthread_mutex_unlock(pthread_mutex_t *mutex); //解鎖
class clock
~clock()
bool lock()
bool unlock()
protected:
pthread_mutex_t mutex_;
};//自動鎖利用物件的建立和執行完呼叫析構完整自動加鎖和解鎖,在呼叫處
class autolock
~autolock()
private:
clock& auto_mutex_;
如上為封裝的互斥鎖和自動鎖的過程。
linux執行緒》同步互斥機制之 互斥鎖
本文基於訊號量 如果訊號量的值最多為1,那實際上相當於乙個共享資源在任意時刻最多只能有乙個執行緒在訪問,這樣的邏輯稱為 互斥 這時,有一種更加方便和語義更加準確的工具來滿足這種邏輯 互斥鎖。幾個執行緒同時去搶乙個鎖,誰搶到了鎖就進門把房間鎖上,訪問資料,出來後之前解鎖。照這樣的邏輯,互斥鎖的操作無非...
執行緒同步之互斥鎖
為什麼要執行緒同步?當多執行緒共享相同的記憶體的時候,需要每乙個執行緒看到相同的檢視。當乙個執行緒被修改時,其他的執行緒也可以修改或者讀取這個變數,所以就需要對這些執行緒同步,保證不會訪問到無效的變數。舉個例子 由此可見,執行緒同步的重要性。執行緒同步之互斥鎖的函式 1.include 2.int ...
linux下執行緒同步之互斥鎖
互斥鎖是多執行緒同步的一種方式,當多個執行緒訪問同乙個變數時,最簡單的方法就是使用乙個互斥鎖 mutex 保護這個共享變數,防止出現資源搶占的問題。下面是未加互斥鎖時 include includepthread mutex t mutex pthread mutex initializer 靜態初...