这里的信号量指的是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 那么就跟互斥量一样了