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