信号量:
多线程环境下使用的同步设施,相当于是互斥锁的升级版本。互斥锁类似一个二元的信号量,确保一个线程能够独占一块资源,
信号量则通过一个计数器来控制线程对于共享资源的访问,当计数器的值大于0的时候线程可以访问共享资源,并且使得计数器的值
减1,当计数值变为0时,所有试图通过信号量的线程均会阻塞,直到计数器的值大于0。
信号量的函数:
int sem_init(sem_t*sem,int pshared,unsigned int value),该函数用于初始化一个信号量,第二个参数为0表示该信号量为当前
进程的局部信号量,否则该信号量在多个进程之间共享。
int sem_destory(sem_t* sem),用于销毁一个信号量。
int sem_wait(sem_t* sem),以原子操作的方式将信号量的值减1,如果信号量的值为0,则该操作将被阻塞到信号量具有非0的值。
int sem_trywait(sem_t* sem),相当图try_wait的非阻塞版本,当信号为0时该函数为-1,并设置errno为-1.
sem_post(sem_t* sem),以原子操作的方式将信号量的值加1,阻塞与sem_wait()的线程将会被唤醒。
以上的所有函数执行成功的返回值均为0,失败的返回值为-1,并且设置errno。