這裡的信号量指的是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 那麼就跟互斥量一樣了