首页 > 解决方案 > 信号量/关键部分实现

问题描述

我正在尝试了解互斥体、信号量和临界区,但我不确定信号量的某些内容。信号量和临界区一样吗?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);

所以我的问题真的是“//这里的关键部分”实际上是一个关键部分吗?

标签: semaphorecritical-section

解决方案


信号量是用于保护关键部分的工具:确保一次只执行一个 CS。

在您的示例中,要执行的第一个进程将sem_wait(&m)执行其关键部分的副本;任何其他尝试执行其对应的进程都sem_wait将被阻止,直到第一个进程通过执行完成其 CS sem_post。此时,其他一些对的调用sem_wait将返回,再次开始该过程。


推荐阅读