作者:每天好心情LJH_276 | 来源:互联网 | 2023-08-16 18:04
文章目录(1)什么是信号量(2)与信号量相关的操作(3)基于环形队列的生产者与消费者模型-信号量(单消费者单生产者)(1)什么是信号量前面的叙述中,我们通过锁保证了每次只有一个线
文章目录
- (1)什么是信号量
- (2)与信号量相关的操作
- (3)基于环形队列的生产者与消费者模型-信号量(单消费者单生产者)
(1)什么是信号量
前面的叙述中,我们通过锁保证了每次只有一个线程进入临界区,但是临界区资源很多也很大,每次只允许一个线程进入往往会使效率很低。所以如果将临界区划分为多个独立的区域,划分为多少个区域就让多少个线程进入,,但是这样就同时带来了一个问题——如果划分为了5个区域,但是同时进入了10个线程该怎么办?所以这一点可以通过信号量解决。信号量可以理解为一个计数器,它用来描述临界资源的有效个数
信号量由一个值和一个指针组成,指针指向等待该信号量的线程。信号量的值表示相应资源的使用情况,比如如果S>=0表示资源够用,如果执行P操作表示请求分配一个资源,那么S就会减一;当S<0时表示已经没有可用资源(此时S的绝对值表示等待该资源的线程数)请求者必须等待其他线程释放资源方可继续运行。如果执行一个V操作就表示会释放一个资源,所以S加一
(2)与信号量相关的操作
1:要使用信号量就需要创建一个sem_t
类型变量