Operating system 信号量是原子的原因是什么

Operating system 信号量是原子的原因是什么,operating-system,semaphore,mutual-exclusion,Operating System,Semaphore,Mutual Exclusion,我正在学习信号量:sem_wait和sem_signal。 参考资料指出,信号量必须是原子的,以实现互斥 我不明白为什么它们一定是原子弹?!如果不是,会发生什么 如果相互信号量实现不是原子的,就会发生这种情况。假设我们使用以下代码来实现信号量: 1 while (semaphore == locked) { 2 pause; 3 } 4 semaphore = locked; 假设处理器0和处理器1都想要锁定信号量,而另一个处理器(#2)拥有该信号量。因此,处理器0和1都在从第1行开始的w

我正在学习信号量:sem_wait和sem_signal。 参考资料指出,信号量必须是原子的,以实现互斥
我不明白为什么它们一定是原子弹?!如果不是,会发生什么

如果相互信号量实现不是原子的,就会发生这种情况。假设我们使用以下代码来实现信号量:

1 while (semaphore == locked) {
2   pause;
3 }
4 semaphore = locked;
假设处理器0和处理器1都想要锁定信号量,而另一个处理器(#2)拥有该信号量。因此,处理器0和1都在从第1行开始的while循环中

一旦另一个处理器(#2)解锁信号量,两个处理器(#0和#1)都可以退出各自的while循环,因为信号量现在已解锁

现在处理器0和1都认为他们已经锁定了信号量。这很糟糕

需要做的是,相对于其他处理器,信号量值的读取和写入必须是原子的

请评论,如果这是不清楚的-我可以进入更多的细节,如果需要的话