【发布时间】:2017-08-18 11:37:59
【问题描述】:
我无法理解 wait() 中的原子操作。在许多资料/书籍中,wait() 操作都是这样实现的:
wait(S) {
while S <= 0;
S--;
}
如果 S--、S即使这样,两个线程也可能会减少 S 值。 然后使用信号量的整个想法就丢失了。
我什至从Wikipedia 那里找到了一些支持,它给出了如下所示的 wait() 实现,并说如果包含 S-- 的块是原子的。对我来说,这完全有道理。
wait(S) {
while true:
[ if S<= 0:
S--;
]
关于第一次实现 wait() 的任何想法。我是不是错过了什么。
【问题讨论】:
-
“等待操作在许多资料/书籍中都是这样实现的”:这不是真的。它不是在源代码中以这种方式实现的,因为它会像你说的那样被破坏。在书中,它是描述,而不是实现,并且可能会以您指示的方式进行描述以帮助您理解它。不过,维基百科中的描述更准确。
标签: multithreading algorithm operating-system