Semaphore的P和V操作是否具有原子性?

11

信号量上可执行的P()和V()操作是否保证原子性?信号量能否防止两个进程同时进入P()操作?


http://www.wordiq.com/definition/Semaphore_%28programming%29 有一个相当不错的解释。 - James
1
好的,问题不在于它们是这样,而在于它们必须是这样。 - Greg A. Woods
2个回答

9
假设我们有一个二进制信号量s,其值为1,并且两个进程同时尝试在s上执行P操作。在下一次对s的V操作之前,只有其中一个操作才能完成;试图执行P操作的另一个进程将被挂起。
来自我的大学笔记:
我们可以将P和V视为控制对资源的访问: 当进程想要使用资源时,它执行P操作:如果成功,则减少可用资源的数量,进程继续进行;如果当前所有资源都在使用中,则进程必须等待。 当进程完成对资源的使用时,它执行V操作:如果有进程在等待该资源,则唤醒其中一个;如果没有等待进程,则增加信号量,表示现在有更多的空闲资源。请注意,V的定义不指定在同一个信号量上挂起了多个进程时唤醒哪个进程。
信号量可以解决互斥和条件同步问题。因此,对于您的两个问题,答案都是:是的。

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接