我正在经历进程同步,并且在理解信号量方面遇到困难。所以这是我的疑问:
消息来源说
" Semaphore S 是一个整数变量,可以通过标准原子操作访问,即 wait() 和 signal()。
它还提供了 wait() 的基本定义
wait(Semaphore S)
{
while S<=0
; //no operation
S--;
}
信号()的定义
signal(S)
{
S++;
}
假设信号量的初始值为 1,假设有两个并发进程 P0 和 P1,它们不应该同时执行其临界区的操作。
现在说 P0 在它的临界区,所以信号量 S 必须有值 0,现在说 P1 想进入它的临界区,所以它执行 wait(),在 wait() 中它不断循环,现在退出循环信号量值必须递增,但这可能是不可能的,因为根据来源,wait() 是原子操作,不能被中断,因此进程 P0 不能在单处理器系统中调用 signal()。
我想知道,到目前为止我的理解是否正确。如果正确,那么当进程 P1 在 while 循环中被触发时,进程 P0 如何调用信号()?