Semaphore/Critial 部分实施
Semaphore/Critial section implementation
我正在尝试了解互斥量、信号量和关键部分,但我不确定信号量的某些方面。信号量是否与临界区相同? 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
的进程都将被阻止,直到第一个进程通过执行 sem_post
完成其 CS。那时,对 sem_wait
的其他一些调用将 return,再次开始该过程。
我正在尝试了解互斥量、信号量和关键部分,但我不确定信号量的某些方面。信号量是否与临界区相同? 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
的进程都将被阻止,直到第一个进程通过执行 sem_post
完成其 CS。那时,对 sem_wait
的其他一些调用将 return,再次开始该过程。