1. 程式人生 > 其它 >訊號量學習

訊號量學習

(一)概念
訊號量是一個整數,這個整數允許多程序或多執行緒同步他們的操作。這個整數必須大於等於0.

linux庫函式中,類似有名對映、匿名對映,有名管道、無名管道,訊號量也有有名訊號量和匿名訊號量。匿名訊號量在記憶體中,不在檔案系統中,一般用於執行緒之間的同步;有名訊號量需要建立檔案,一般用於程序之間的同步。有名訊號量見:有名訊號量

(二)匿名訊號量庫函式
#include <semaphore.h>
int sem_init(sem_t *sem, int pshared, unsigned int value);
功能:初始化一個匿名訊號量
引數:
sem 指定了要初始化的訊號量的地址
pshared 0 多執行緒 非0 多程序
value 指定了訊號量的初始值
返回值:
成功 0
錯誤 -1 errno被設定

#include <semaphore.h>
int sem_destroy(sem_t *sem);
功能:銷燬一個匿名訊號量
引數:
sem 指定要銷燬的匿名訊號量的地址
返回值:
成功 0
錯誤 -1 errno被設定

#include <semaphore.h>
int sem_post(sem_t *sem);
功能:訊號量的值加1操作.如果因此變為大於0.等待訊號量的值變為大於0的程序或執行緒被喚醒,繼續對訊號量的值減一.
引數:
sem 指定具體的訊號量
返回值:
成功 0
錯誤 -1 errno被設定 訊號量的值不變

#include <semaphore.h>
int sem_wait(sem_t *sem);
功能:減一操作 如果當前訊號的值大於0,繼續立即返回.
如果當前訊號量的值等於0.阻塞,直到訊號量的值變為大於0.
引數:
sem 指定具體的訊號量
返回值:
成功 0
錯誤 -1 errno被設定 訊號量的值不變

int sem_trywait(sem_t *sem);
功能:嘗試wait,不阻塞

int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);
功能:帶時間的wait

參考部落格:https://blog.csdn.net/u013511885/article/details/103116998?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-3-103116998.pc_agg_new_rank&utm_term=c%E8%AF%AD%E8%A8%80%E4%BF%A1%E5%8F%B7%E9%87%8F%E6%9C%BA%E5%88%B6&spm=1000.2123.3001.4430