Linux:POSIX信号量

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章