【问题标题】:Are Semaphore P and V operations atomic?信号量 P 和 V 操作是原子的吗?
【发布时间】:2011-07-02 22:34:12
【问题描述】:

可以在信号量上执行的 P() 和 V() 操作是否保证原子性?信号量可以阻止两个进程进入 P() 吗?

【问题讨论】:

标签: multithreading concurrency semaphore


【解决方案1】:

假设我们有一个二进制信号量 s,其值为 1,并且两个进程同时尝试在 s 上执行 P。在 s 上的下一个 V 操作之前,这些操作中只有一个能够完成;试图执行 P 操作的其他进程被挂起。

摘自我的大学笔记:

我们可以认为如果 P 和 V 作为控制 访问资源:

当一个进程想要使用 资源,它执行 P 操作: 如果成功,它会递减 可用资源的数量和 过程继续;如果所有 资源当前正在使用中, 过程必须等待。

当一个进程完成时 资源,它执行 V 操作: 如果有进程在等待 资源,其中之一被唤醒;
如果没有等待进程, 信号量递增 说明现在有更多 资源免费。请注意, V 的定义没有指定哪个 如果多个进程被唤醒 进程已暂停在同一 信号量。

信号量可以解决互斥和条件同步问题。所以你的两个问题的答案都是:是的。

【讨论】:

    【解决方案2】:

    如果我没记错的话,是的。它们需要确保一个线程无法获取资源,而另一个线程可以。如果不是,这意味着两个线程可以开始访问一个资源,然后从 CPU 中切换出来,而另一个进程可以访问它。这会扰乱一些事情。

    更多信息请看这里:http://en.wikipedia.org/wiki/Semaphore_(programming)#Semantics_and_Implementation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-06
      • 2015-12-17
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      • 2019-10-23
      相关资源
      最近更新 更多