Linux下互斥量詳解

2021-09-26 06:37:11 字數 1054 閱讀 8307

當多個執行緒同時訪問其共享的資源時,需要相互協調,以防止出現資料不一致、不完整的問題,能達到這種狀態執行緒同步。而有些資源在同一時刻只有乙個執行緒訪問,對於這種資源的訪問需要競爭。 當資源獲取到後,能夠防止資源被其它執行緒再次獲取的技術叫互斥。

pthread_mutex_t mutex=pthread_mutex_initializer;

int pthread_mutex_init(pthread_mutex_t *__mutex,__const pthread_mutexattr_t *__mutexattr)

功能:初始化互斥量,使用第二互斥量來初始化第乙個互斥量,如果第二個為空,則使用預設引數初始化互斥量,也可以使用巨集來初始化。
int pthread_mutex_destroy(pthread_mutex_t *__m utex)
功能:銷毀互斥量

注意:互斥量是乙個結構體,裡面有成員是指標,指向了堆記憶體資料,需要顯式初始化函式以及銷毀函式。

如果使用堆記憶體儲存互斥量,需要在呼叫了銷毀函式後,再進行free。

int pthread_mutex_lock(pthread_mutex_t *__mutex)
功能:鎖定互斥量,當互斥量是鎖定狀態,此函式則阻塞(直到互斥量在其它執行緒中解鎖,呼叫者者執行緒加鎖成功才返回)。

注意:互斥量一旦加鎖,只有它自己能解。

int pthread_mutex_trylock(pthread_mutex_t *__m utex)
功能:嘗試鎖定互斥量,能鎖就鎖,不能鎖就返回。
int pthread_mutex_timedlock (pthread_mutex_t *_ _restrict __mutex,const struct timespec *__restric t_abstime);
功能:在指定時間內鎖定乙個互斥量(使用的系統時間)。

struct timespec

;

int pthread_mutex_unlock (pthread_mutex_t *__mu tex);

功能:解鎖

Linux 多執行緒互斥量互斥

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

Linux 互斥量屬性

該型別是乙個結構,其中存放了互斥量的各屬性字段。在對互斥量初始化時,可以使用pthread mutex initializer常量初始化,或在互斥量的初始化函式中的屬性引數傳遞空指標。這樣得到互斥量為預設屬性。對於非預設屬性,可使用如下的函式對pthread mutexattr t結構進行初始化和反...

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

1 執行緒同步的目的是不管執行緒之間的執行如何穿插,其執行結果都是正確的。即保證多執行緒執行下結果的確定性。2 同步就是讓所有執行緒按照一定的規則執行,使得其正確性和效率都有跡可循,即執行緒同步就是對執行緒之間的穿插進行控制。3 每個物件都對應於乙個 互斥鎖 的標記,這個標記用來保證在任一時刻,只能...