執行緒同步 訊號量

2021-10-02 09:25:08 字數 1523 閱讀 3608

主要應用函式:

(1)sem_init

(2)sem_destroy;

(3)sem_wait

(4)sem_trywait;

(5)sem_timewait;

(6)sem_post;

sem_wait:相當於pthread_mutex_lock,(1)訊號量》0時–;(2)訊號量=0時,阻塞;

sem_post:相當於pthread_mutex_unloxk;(1)訊號量++,喚醒因此訊號量而阻塞的執行緒;

區別條件變數實現的生產者消費者模型,訊號量可以同時多個消費者同時消費;

生產者–消費者模型的實現

#include

#include

#include

#include

#include

#define num 5

int queue[num]

;//佇列表示共享資源的進出

int front=0;

int tail=0;

sem_t blank,star;

void

*produce

(void

*arg)

pthread_exit

(null);

}void

*consume

(void

*arg)

pthread_exit

(null);

}int

main()

結果分析:

------procude 84

------consume 84

------procude 16

------consume 16

------procude 87

------consume 87

------procude 22

------consume 22

------procude 91

------consume 91

------procude 27

------procude 27

------consume 27

------procude 12

------consume 27

------consume 12

------procude 83

------consume 83

------procude 24

------consume 24

------procude 30

------consume 30

------procude 59

------consume 59

只有有產品才能消費,結果符和預期;

執行緒訊號量同步

thread sem.c include include include include define thread number 3 define repeat number 3 define delay time levels 10.0 sem t sem thread number void ...

執行緒同步 訊號量

執行緒同步方法 訊號量不常用,找到個帖子不錯,記錄一下!依賴的標頭檔案 include 函式宣告 sem t 表示訊號量 int sem init sem t sem,int pshared,unsigned int value 名稱 sem init 功能 initialize an unname...

執行緒同步 訊號量

進化版的互斥鎖 1 n 由於互斥鎖的粒度比較大,如果我們希望在多個執行緒間對某一物件的部分資料進行共享,使用互斥鎖是沒有辦法實現的,只能將整個資料物件鎖住。這樣雖然達到了多執行緒操作共享資料時保證資料正確性的目的,卻無形中導致執行緒的併發性下降。執行緒從並行執行,變成了序列執行。與直接使用單程序無異...