天天看點

linux 線程同步 信号量

這裡的信号量指的是POSIX  的未命名信号量

POSIX的信号量還可用于程序間的同步  這裡隻說線程的同步

信号量的工作方式

1 測試信号量是否為0

2是 休眠 直到 信号量大于0時才可能被喚醒

3否  信号量減一

測試與減1是一個原子操作  否則會出現減2的事情

int sem_init(sem_t *sem, int pshared, unsigned int value);//初始化一個信号量  如果用于線程之間pshared  == 0  value指定了信号量的初值其值為 0 - SEM_VALUE_MAX

int sem_wait(sem_t *sem);//如果信号量計數為零則阻塞等待喚醒   否則信号計數減一    

int sem_trywait(sem_t *sem);// 如果信号量為0 不會阻塞  傳回-1 errno被設定

int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);//逾時的

int sem_post(sem_t *sem);//使信号量+1    如果有wait阻塞  則喚醒+1的信号量在次減一

int sem_destroy(sem_t *sem);//銷毀信号量

sem_t  //信号量中需要的資料結構

如果信号量被初始化為1 那麼就跟互斥量一樣了

繼續閱讀