2021-05-24
2021/5/24 18:27:31
本文主要是介绍2021-05-24,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
基于Linux操作系统的司机售票员的PV操作问题
P操作和V操作室操作系统中,常用的进程管理的操作模型,不同的操作系统有不同的实现方法,而不是一个具体可以直接调用的函数。PV操作主要是可以实现进程的同步或者互斥。接下来就用一个经典的例子理解PV操作
- 初步认识
信号量S:
信号量的值有3种情况有不同的处理方式
S=0时,表示当前没有可用资源,此时进程会被阻塞,等待资源空闲出来。
S>0时,表示当前有S个空余资源,此时可以让进程继续进行下去,不会阻塞。
S<0时,表示当前资源短缺,其绝对值表示同样在等待该资源释放的进程数目
P操作:
功能:为进程申请一个资源,或者阻塞一个进程
逻辑:
void P(S) { S=S-1; /*信号量自减1,表示申请了一个 资源,资源数目减去1*/ if(S<0) /*如果S<0了,说明资源不足,申请失败, 但是S不要加回来,S绝对值用来顺便统计 一共有多少进程在等待*/ { 阻塞正在申请该资源的当前进程,因为资源不够; } }
**总结:**其实P操作就是检测信号量够不够,够的话就启动这个信号量代表的进程,不够的话就暂时把这个进程阻塞了。
V操作:
** 功能** 释放一个资源。让资源或者信号量增加1个
** 逻辑:**
void V(S) { S=S+1; //把当前进程占有的资源释放掉,故S加一 if(S<=0) { 从阻塞队列中释放一个进程,继续执行; } }
接下来我们用一个例子体会:
- 司机和售票员必须同步:一方面:售票员只有关闭车门后,司机才可以开车;另一方面:司机到站停车后,售票员才可以打开车门。不可以混乱。试用伪代码实现逻辑过程。 *
【分析】
这篇关于2021-05-24的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-08如何在敏捷项目中实现高效测试?
- 2024-07-08用户故事一定要有 “So that...” 吗?
- 2024-07-04TiDB 资源管控的对撞测试以及最佳实践架构
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt