可以对信号量执行的P()和V()操作是否保证原子?信号量是否可以防止两个进程进入P()?
答案 0 :(得分:8)
假设我们有一个二进制信号量s,其值为1,并且两个进程同时尝试在s上执行P.这些操作中只有一个能够在s上的下一个V操作之前完成;试图执行P操作的另一个进程被暂停。
取自我的大学笔记:
我们可以认为P和V是控制的 访问资源:
当一个进程想要使用时 资源,它执行P操作: 如果这成功,它会减少 可用资源量和 过程继续;如果全部 资源目前正在使用中 过程必须等待。
当一个过程结束时 资源,它执行V操作: 如果有进程在等待 资源,其中一个被唤醒;
如果没有等待过程, 信号量递增 表明现在有更多 资源免费。请注意 V的定义没有具体说明 如果不止一个,进程就会被唤醒 过程已暂停相同 信号量。
信号量可以解决互斥和条件同步问题。所以你的问题的答案是:是的。
答案 1 :(得分:3)
如果我没记错的话,是的。它们必须确保一个线程无法获得资源而另一个线程无法获取资源。如果不是这样,这意味着两个线程可以开始访问资源,然后从CPU切换出来,而另一个进程可以获得访问权限。这会破坏很多东西。
有关详细信息,请参阅此处:http://en.wikipedia.org/wiki/Semaphore_(programming)#Semantics_and_Implementation