執行緒同步方法 訊號量不常用,找到個帖子不錯,記錄一下!
依賴的標頭檔案
#include
函式宣告
sem_t
表示訊號量
int sem_init(sem_t *sem, int pshared,unsigned int value);
名稱:sem_init
功能:initialize an unnamed semaphore,
初始化訊號量
sem_t
,初始化的時候可以指定訊號量的初始值,以及是否可以在多程序間共享
。標頭檔案:
#include
函式原形:
int sem_init(sem_t *sem, int pshared, unsigned int value);
引數:返回值:
sem_init() returns 0 on success; on error, -1 is returned, and errno is set to indicate the error.
int sem_wait(sem_t *sem);
int sem_trywait(sem_t *sem);
名稱:sem_wait
sem_trywait
功能:lock a semaphore
一直阻塞等待直到訊號量
> 0.
標頭檔案:
#include
函式原形:
int sem_wait(sem_t *sem);
int sem_trywait(sem_t *sem);
引數:返回值:
all of these functions return 0 on success; on error, the value of the semaphore is left unchanged, -1 is returned, and errno is set to indicate the error.
int sem_timedwait(sem_t *sem, const structtimespec *abs_timeout);
名稱:sem_timedwait
功能:lock a semaphore
,阻塞等待若干時間直到訊號量
> 0
標頭檔案:
#include
函式原形:
int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);
引數:返回值:
all of these functions return 0 on success; on error, the value of the semaphore is left unchanged, -1 is returned, and errno is set to indicate the error.
int sem_post(sem_t *sem);
名稱:sem_post
功能:unlock a semaphore
,使訊號量加1。
標頭檔案:
#include
函式原形:
int sem_post(sem_t *sem);
引數:返回值:
sem_post() returns 0 on success; on error, the value of the semaphore is left unchanged, -1 is returned, and errno is set to indicate the error.
int sem_destroy(sem_t *sem);
名稱:sem_destroy
功能:destroy an unnamed semaphore
釋放訊號量。和
sem_init對應
標頭檔案:
#include
函式原形:
int sem_destroy(sem_t *sem);
引數:返回值:
sem_destroy() return 0 on success;on error,-1 is returned,an errno is set to indicate the error.
案例說明:
#include
#include
#include
#include
#include
#define num 5
int queue[num];
sem_t blank_number,product_number;
void *producer(void *arg) }
void *consumer(void *arg) }
int main(int argc ,char *argv)
執行結果:
執行緒訊號量同步
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 ...
執行緒同步 訊號量
進化版的互斥鎖 1 n 由於互斥鎖的粒度比較大,如果我們希望在多個執行緒間對某一物件的部分資料進行共享,使用互斥鎖是沒有辦法實現的,只能將整個資料物件鎖住。這樣雖然達到了多執行緒操作共享資料時保證資料正確性的目的,卻無形中導致執行緒的併發性下降。執行緒從並行執行,變成了序列執行。與直接使用單程序無異...
執行緒同步 訊號量
上篇文章 執行緒同步 睡覺與喚醒 遺留了乙個問題,就是會出現死鎖的情況。所以為了解決這個問題,又要引入乙個新的同步概念,那就是訊號量。起初我個人在理解的時候陷入了乙個奇怪的圈子,就總憑感覺和名字認為這個訊號量是不是乙個儲存我之前失效訊號的容器,讓後在需要之前訊號的時候在重新呼叫訊號。其實沒有那麼複雜...