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标识的信号量