【C++ 語言】pthread_mutex_t 互斥鎖

      網友投稿 1001 2025-03-31

      文章目錄

      線程同步機制

      互斥鎖

      互斥鎖使用示例

      線程同步機制引入 : 多個線程讀取同一個資源時 , 可能會造成沖突 , 因此需要引入線程同步機制 , 讓多個線程按照一定規則對共享的資源進行操作 ;

      互斥鎖使用流程 : ① 聲明互斥鎖 , ② 初始化互斥鎖 , ③ 加鎖 , ④ 解鎖 , ⑤ 銷毀互斥鎖 ;

      ① 聲明互斥鎖 ;

      pthread_mutex_t mutex_t;

      1

      ② 初始化互斥鎖 :

      //初始化互斥鎖 pthread_mutex_init(&mutex_t, 0);

      1

      2

      ③ 加鎖 :

      //先用互斥鎖上鎖 pthread_mutex_lock(&mutex_t);

      1

      2

      ④ 解鎖 :

      //操作完畢后, 解鎖 pthread_mutex_unlock(&mutex_t);

      1

      2

      ⑤ 銷毀互斥鎖 :

      //銷毀互斥鎖 pthread_mutex_destroy(&mutex_t);

      1

      2

      代碼示例 :

      #include "005_Thread.h" #include //引入隊列的頭文件 #include using namespace std; /* 互斥鎖 : 聲明 : 先聲明互斥鎖 初始化 : 在進行初始化操作 銷毀 : 使用完畢后 , 要將該互斥鎖銷毀 */ pthread_mutex_t mutex_t; //聲明一個隊列變量 // 該變量是全局變量 // 該變量要在不同的線程中訪問 , 用于展示線程同步 queue que; /* 操作線程方法 : 參數和返回值都是 void* 類型 互斥鎖使用 : 多個線程對一個隊列進行操作 , 需要使用互斥鎖將該隊列鎖起來 , pthread_mutex_lock 使用完畢后在進行解鎖 , pthread_mutex_unlock 該類型的鎖與 Java 中的 synchronized 關鍵字一樣 , 屬于悲觀鎖 其作用是通過 mutex 互斥鎖 , 將上鎖與解鎖之間的代碼進行同步 */ void* queue_thread_fun(void* args) { //先用互斥鎖上鎖 pthread_mutex_lock(&mutex_t); if (!que.empty()) { //打印隊列中的第一個元素 printf("獲取 queue_thread 隊列第一個數據 : %d\n", que.front()); //將隊列首元素彈出 que.pop(); } else { printf("獲取 queue_thread 隊列為空\n"); } //操作完畢后, 解鎖 pthread_mutex_unlock(&mutex_t); return 0; } /* 如果 8 個線程同時讀取隊列中的信息 , 會出現程序崩潰 在多線程環境下 , 對隊列進 queue_thread 行操作 , queue_thread 是線程不安全的 這里需要加鎖 , 進行 線程同步的操作 */ int main() { //初始化互斥鎖 pthread_mutex_init(&mutex_t, 0); //向其中加入幾個int數據 for (size_t i = 0; i < 5; i++) { que.push(i); } //創建多個線程操作 queue_thread 隊列 pthread_t pids[8]; for (size_t i = 0; i < 8; i++) { //創建線程 pthread_create(&pids[i], 0, queue_thread_fun, 0); } //銷毀互斥鎖 pthread_mutex_destroy(&mutex_t); return 0; }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      【C++ 語言】pthread_mutex_t 互斥鎖

      67

      68

      69

      70

      71

      72

      73

      74

      75

      76

      77

      78

      79

      80

      執行結果 :

      獲取 queue_thread 隊列第一個數據 : 0 獲取 queue_thread 隊列第一個數據 : 1 獲取 queue_thread 隊列第一個數據 : 2 獲取 queue_thread 隊列第一個數據 : 3 獲取 queue_thread 隊列第一個數據 : 4 獲取 queue_thread 隊列為空 獲取 queue_thread 隊列為空

      1

      2

      3

      4

      5

      6

      7

      C++ 任務調度

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:關于做智能客服系統的公司的信息
      下一篇:簡歷電子表格: 提高簡歷撰寫效率的必備工具
      相關文章
      亚洲制服丝袜一区二区三区| 亚洲成年人在线观看| 亚洲视频在线观看一区| 亚洲午夜福利AV一区二区无码| 亚洲精品无码AV中文字幕电影网站| 亚洲欧美国产国产一区二区三区| 色老板亚洲视频免在线观| 亚洲1234区乱码| 中文日韩亚洲欧美制服| 亚洲一区二区无码偷拍| 亚洲AV无码一区二区三区牛牛| 国产91在线|亚洲| 亚洲色成人四虎在线观看| 国产亚洲福利在线视频| 亚洲国产精品网站在线播放| 亚洲国产精品无码中文lv| 亚洲丁香婷婷综合久久| 九九精品国产亚洲AV日韩| 老牛精品亚洲成av人片| 亚洲国产成人精品女人久久久| 大胆亚洲人体视频| 亚洲中文字幕无码专区| 亚洲欧洲日产国码无码久久99 | 中文字幕不卡亚洲 | 亚洲乱码国产乱码精品精| 国产亚洲一区二区手机在线观看| 亚洲va无码专区国产乱码| 久久久久久亚洲AV无码专区 | 伊人久久亚洲综合| 亚洲成AV人片在线观看无| 久久久久亚洲AV无码麻豆| 亚洲午夜电影在线观看高清 | 亚洲色精品三区二区一区| 亚洲AV无码国产剧情| 亚洲成AV人在线观看网址| 亚洲中文字幕无码久久综合网| 亚洲av无码国产精品色午夜字幕| 亚洲成综合人影院在院播放| 久久亚洲国产成人影院| 国产亚洲人成在线影院| 亚洲桃色AV无码|