作業系統(Linux)多執行緒 互斥量實現同步

2021-07-25 00:02:08 字數 1322 閱讀 8746

在linux多執行緒--訊號量實現同步中用訊號量實現了多執行緒同步。

在訊號量中用sem_t結構表示,在互斥量中用

pthread_mutexattr_

t表示。

使用互斥變數以前,必須首先對它進行初始化,可以把它設定為常量pthread_mutex_initializer(只適合用於靜態分配的互斥量),

也可以用

pthread_mutexattr_init

函式初始化pthread_mutexatrr_t結構。如果用動態分配(如呼叫malloc函式),在釋放記憶體前 用

pthread_mutexattr_destroy

函式丟棄用完的互斥量。

#include int pthread_mutexttr_init(pthread_mutexattr_t *attr);

int pthread_mutexattr_destory(pthread_mutexattr_t *attr);

要預設的屬性初始化互斥量,只需要把attr設定為null。

#include int pthread_mutex_lock(pthread_mutex_t *mutex);

int pthread_mutex_trylock(pthread_mutex_t *mutex)

int pthread_mutex_unlock(pthread_mutex_t *mutex)

對互斥量進行加鎖,需要呼叫pthread_mutex_lock。如果互斥量已經上鎖,呼叫執行緒將阻塞直到互斥量被解鎖。

對於互斥量解鎖,需要呼叫pthread_mutex_unlock。

如果執行緒不希望被阻塞,它可以呼叫pthred_mutex_trylock嘗試對互斥量進行加鎖。如果呼叫pthread_mutex_trylock時互斥量處於未鎖住狀態,那麼pthread_mutex_trylock

將被鎖住互斥量,不會出現直到返回0,否則pthread_mutex_trylock就會失敗,不能鎖住互斥量,返回ebuy。

乙個小例子:

#include #include #include #include #include pthread_mutex_t mutex;

int i=0;

void* thread_fun1()

}void* thread_fun2()

}int main()

執行結果:

linux多執行緒 作業系統執行緒同步互斥

這一目主要我想得是理論和實際結合的辦法去做,先將理論,把這塊在作業系統中的內容先進行陳述。然後用linux下的 去真正實現。perterson演算法是用來是實現對臨界區資源的互斥訪問,它是用軟體的機制實現。也就是說在linux系統程式設計當中,如果不讓你使用pthread mutex t mutex...

Linux 多執行緒互斥量互斥

同乙個程序中的多個執行緒共享所在程序的記憶體資源,當多個執行緒在同一時刻同時訪問同一種共享資源時,需要相互協調,以避免出現資料的不一致和覆蓋等問題,執行緒之間的協調和通訊的就叫做執行緒的同步問題,執行緒同步的思路 讓多個執行緒依次訪問共享資源,而不是並行 mutex被建立時可以有初始值,表示mute...

Linux 多執行緒同步(互斥量)

threadrace.c include include include include int myglobal pthread mutex t work mutex pthread mutex initializer 定義互斥量 初始化互斥量 pthread mutex init work mu...