Aka*_*uja 8 synchronization operating-system process
我正在进行流程同步,并且在理解信号量方面面临困难.所以这是我的疑问:
消息来源说
"信号量S是一个整数变量,可通过标准原子操作访问,即wait()和signal().
它还提供了wait()的基本定义
wait(Semaphore S)
{
while S<=0
; //no operation
S--;
}
Run Code Online (Sandbox Code Playgroud)
signal()的定义
signal(S)
{
S++;
}
Run Code Online (Sandbox Code Playgroud)
设信号的初始值为1,并说有两个并发进程P0和P1不应同时执行其临界区的操作.
现在说P0处于其关键部分,因此信号量S必须具有值0,现在说P1想要进入其临界区以便执行wait(),并且在wait()中它连续循环,现在从循环中退出信号量值必须递增,但它可能是不可能的,因为根据源,wait()是原子操作并且不能被中断,因此进程P0不能在单个处理器系统中调用signal().
我想知道,到目前为止我的理解是否正确.如果正确,那么当进程P1在循环中被攻击时,进程P0如何调用signal()?
我认为得票最高的答案不准确!
wait() 和 signal() 操作必须是完全原子的;没有两个进程可以同时执行 wait() 或 signal() 操作,因为它们是在内核中实现的,并且内核模式下的进程不能被抢占。
如果多个进程同时尝试 P(S),则仅允许一个进程继续进行(不受竞争条件影响的非抢占式内核)。
为了使上述实现工作,抢占是必要的(抢占式内核)
了解信号量操作的原子性 http://personal.kent.edu/~rmuhamma/OpSystems/Myos/semaphore.htm https://en.wikibooks.org/wiki/Operating_System_Design/Processes/Semaphores