semaphore - 信号量/关键部分实现
问题描述
我正在尝试了解互斥体、信号量和临界区,但我不确定信号量的某些内容。信号量和临界区一样吗?semaphore.h 中关于如何使用信号量的定义说明了用途:
sem_t m;
sem_init(&m, 0, X); // initialize semaphore to X; what should X be?
sem_wait(&m);
// critical section here
sem_post(&m);
所以我的问题真的是“//这里的关键部分”实际上是一个关键部分吗?
解决方案
信号量是用于保护关键部分的工具:确保一次只执行一个 CS。
在您的示例中,要执行的第一个进程将sem_wait(&m)
执行其关键部分的副本;任何其他尝试执行其对应的进程都sem_wait
将被阻止,直到第一个进程通过执行完成其 CS sem_post
。此时,其他一些对的调用sem_wait
将返回,再次开始该过程。
推荐阅读
- azure - 是什么导致 Azure API 管理在收到请求和后端执行之间超时
- c - 我的光线投射器中透视扭曲的原因是什么?
- javascript - 当我没有在行中输入 0 时,为什么它说 0 未定义?
- winapi - Windows 防火墙:寻找用户交互 API
- javascript - Javascript 新手 - 用于 VSCode 的 Live Server 未显示空白脚本的空白页面
- asp.net-core - 覆盖 .NET Core 中的控制器级别授权值
- c++ - C ++从按列拆分的文件中读取整数
- vue.js - VueJS:如何访问路由文件中的参数值
- react-native - 找不到导航对象。您的组件是否在导航器的屏幕内?抽屉导航器
- xcode - XCode 12.4:发生内部错误编辑功能可能受到限制