POSIX信号量
POSIX信号量和SystemV信号量作⽤相同,都是⽤于同步操作,达到⽆冲突的访问共享资源目的。 但POSIX可以⽤于线程间同步。
信号量本质上是一个计数器,这个计数器是用来描述临界资源当中资源数目的。信号量本身也会被多个线程申请,所以信号量本身也是临界资源,那么它要保护临界资源就要保证自己本身是安全的,所以信号量是原子性的。因此信号量不能用整形计数器来代替,因为整形的++和- -操作不是原子的。
只要你申请到信号量之后,必然在临界资源里有一块空间给你留着。
POSIX信号量的使用
初始化信号量(sem_init)
#include <semaphore.h> int sem_init(sem_t *sem, int pshared, unsigned int value);
参数:
sem: 要初始化的信号量
pshared: 0表⽰线程间共享,⾮零表⽰进程间共享
value: 信号量初始值
销毁信号量(sem_destroy)
int sem_destroy(sem_t *sem);
等待信号量(sem_wait)(P操作)- -
功能:等待信号量,会将信号量的值减1
int sem_wait(sem_t *sem);
发布信号量(sem_post)(V操作)+ +
功能:发布信号量,表⽰资源使⽤完毕,可以归还资源了。将信号量值加1。
int sem_post(sem_t *sem);
应用信号量实现一个基于环形队列的生产者消费者模型:
https://blog.csdn.net/ETalien_/article/details/86566945