linux執行緒》同步互斥機制之 互斥鎖

2021-08-08 11:39:10 字數 1271 閱讀 8973

本文基於訊號量

如果訊號量的值最多為1,那實際上相當於乙個共享資源在任意時刻最多只能有乙個執行緒在訪問,這樣的邏輯稱為「互斥」。這時,有一種更加方便和語義更加準確的工具來滿足這種邏輯---互斥鎖。幾個執行緒同時去搶乙個鎖,誰搶到了鎖就進門把房間鎖上,訪問資料,出來後之前解鎖。

照這樣的邏輯,互斥鎖的操作無非就是:

1.定義互斥鎖。

-----pthread_mutex_t類

2.初始化鎖。--------pthread_mutex_init()函式  int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);

3.加鎖。--------------pthread_mutex_lock()函式  int pthread_mutex_lock(pthread_mutex_t *mutex)

4.解鎖。--------------pthread_mutex_unlock()函式  int pthread_mutex_unlock(pthread_mutex_t *mutex)

5.銷毀互斥鎖。----pthread_mutex_destroy()函式 int pthread_mutex_destroy(pthread_mutex_t *mutex)

c**示例:

#include #include #include /* 1 定義互斥鎖變數 */

pthread_mutex_t m;

// 被訪問的資源,全域性變數

int a = 100;

void *routine(void *arg)

// 退出執行緒

pthread_exit(null);

}void *routine1(void *arg)

// 退出執行緒

pthread_exit(null);

}int main(int argc, char const *argv)

// 阻塞等待子執行緒退出、

pthread_join(tid, null);

pthread_join(tid1, null);

/* 5 銷毀互斥鎖 */

pthread_mutex_destroy(&m);

return 0;

}

執行緒同步機制之互斥量

一 互斥量的概念 互斥量 mutex 從概念上來說類似於乙個二進位制訊號量,即初始值為1的訊號量。互斥量被獲取之後就不能再被獲取,因此對互斥體的獲取和釋放操作常常稱為加鎖和解鎖操作。互斥量只能由獲取它的執行緒進行釋放,如果違反這一原則,則結果是未定義的。互斥量從本質上說是一把鎖,在訪問共享資源前對互...

執行緒的同步 互斥機制

整理執行緒同步的 api函式及其作用 執行緒同步的方式和機制 臨界區 互斥量 事件 訊號量四種方式 臨界區 critical section 互斥量 mutex 訊號量 semaphore 事件 event 的區別 1 臨界區 通過對多執行緒的序列化來訪問公共資源或一段 速度快,適合控制資料訪問。在...

執行緒的同步 互斥機制

整理執行緒同步的api函式及其作用 執行緒同步的方式和機制 臨界區 互斥量 事件 訊號量四種方式 臨界區 critical section 互斥量 mutex 訊號量 semaphore 事件 event 的區別 1 臨界區 通過對多執行緒的序列化來訪問公共資源或一段 速度快,適合控制資料訪問。在任...