Linux多线程之信号量与基于环形队列的生产消费者模型

本文介绍了POSIX信号量的概念、使用场景,以及如何在生产者消费者模型中应用环形队列实现同步。通过信号量的计数机制,解决了资源访问的互斥问题,强调了多生产多消费模型中并发处理的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 (。・∀・)ノ゙嗨!你好这里是ky233的主页:这里是ky233的主页,欢迎光临~icon-default.png?t=N7T8https://blog.youkuaiyun.com/ky233?type=blog

点个关注不迷路⌯'▾'⌯

目录

一、POSIX信号量

1.什么是信号量

1.信号量引入 

2.一个例子

2.如何理解信号量的使用

1.理解

2.初始化信号量

3.销毁信号量

4.等待信号量

5.发布信号量

二、基于环形队列的生产消费者模型

1.概念与结构

2.代码 

3.多生产多消费的意义在哪里?

4.信号量的意义是什么呢?


一、POSIX信号量

1.什么是信号量

POSIX信号量和SystemV信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。 但POSIX可以用 于线程间同步。

———————————————————————————————————————————

1.信号量引入 

共享资源在任何一个时刻都只有一个执行流进行访问所以有了临界资源和临界区!

就比如在生产者与消费者模型中,我们访问临界资源是需要互斥的,互斥就代表着共享资源是被当做整体进行使用的

可是如果 一个共享资源不被当作一个整体,而是让不同的执行流访问不同的区域的话,那么就可以继续并发了,我们只有在访问我们其中的一个小的资源的进行同步或者互斥

问题一:那么我们怎么直到一共有多少个资源还剩下多少个呢?

问题二:我们怎么保证这个资源就是给你的呢?

问题三:那么我怎么直到我一定可以有一个共享资源而不被其他线程抢走呢?

2.一个例子

在我们看电影的时候我们要先买票,即便我们迟到了,我们也会非常清楚这个座位是我们的,因为我们买票了!

所以买票的本质就是叫做:资源的预定机制!

同样的,信号量的本质就是计数器,访问临界资源的时候必须要先申请信号量资源(sem--,预定资源,p操作),使用完毕信号量资源的时候,资源会被释放(sem++,释放资源,v操作),所以只要我们申请了,即使不去那块共享资源也是我的!

2.如何理解信号量的使用

1.理解

我们申请了一个信号量,代表这当前执行流一定具有一个资源,可以被它使用了,那么具体是哪一个资源呢?

这个信号量没办法保证!信号量只能保证有一个资源可以被你访问的,这是需要程序员自定义编码完成的!

所以上述两个问题我们就可以解答了

问题一:已有有多少资源就是信号量初始化的时候是几就是有多少资源;还剩下多少个就是信号量在被使用的期间的值

问题二:是由程序员编码来决定是否给我的

问题三:信号量本质是一个计数器,只要申请成功了,那么

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值