Semaphore P和V操作是原子的吗?

Adi*_*369 10 concurrency multithreading semaphore

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

Dhr*_*ola 8

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

取自我的大学笔记:

我们可以认为P和V是否可以控制对资源的访问:

当进程想要使用该资源时,它执行P操作:如果成功,则减少可用资源量并继续该进程; 如果当前正在使用所有资源,则该过程必须等待.

当一个进程完成资源时,它执行一个V操作:如果有进程等待资源,其中一个被唤醒;
如果没有等待进程,则信号量增加,表明现在有更多资源可用.请注意,如果在同一个信号量上挂起了多个进程,则V的定义不会指定唤醒哪个进程.

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