https://blog.csdn.net/tennysonsky/article/details/46496201

无名信号量一般用于线程间的同步与互斥

函数用到的头文件: #include 
                 #include 
编译信号量函数时,需要加上-lpthread

信号量数据类型:sem_t

1)int sem_init(sem_t *sem,int pshared,unsigned int value);

参数:

        sem:信号量地址。

        pshared:等于0,信号量在线程间共享(常用);不等于0,信号量在进程间共享。

        value:信号量的初始值。

返回值:

        成功:0

            失败:-1

2)信号量P操作(减1)

int sem_wait(sem_t *sem); 

功能:

        将信号量值减1。操作前,先检查信号量(sem)的值是否为0,若信号量为0,此函数会阻塞,直到信号量大于0时才进行减1操作

参数:

        sem:信号量的地址。

返回值:

        成功:0

        失败:-1

int sem_trywait(sem_t *sem);

以非阻塞的方式来对信号量进行减1操作。若操作前,信号量的值等于0,则对信号量的操作失败函数立即返回。

3)信号量V操作(加1)

int sem_post(sem_t *sem);

功能:

        将信号量的值加1并发出信号唤醒等待线程(sem_wait())。

参数:

        sem:信号量的地址。

返回值:

        成功:0

        失败:-1

4)获取信号量的值

int sem_getvalue(sem_t *sem,int *sval);

功能:

        获取sem标识的信号量的值。保存在sval中。

参数:

        sem:信号量地址

        sval:保存信号量值的地址。

返回值:

        成功:0

        失败:-1

5)销毁信号量

int sem_destroy(sem_t *sem);

功能:

        删除sem标识的信号量