无等待的定义(指并行编程)

时间:2010-05-17 18:18:12

标签: concurrency terminology

在Maurice Herlihy的论文“无等待同步”中,他定义了无等待:

“并行数据对象的无等待实现是一种保证 无论如何,任何进程都可以在有限的步骤中完成任何操作 其他流程的执行速度。“ www.cs.brown.edu/~mph/Herlihy91/p124-herlihy.pdf

让我们从宇宙中进行一次操作。

(1)定义是否意味着:“每个过程在相同的有限数量的步骤中完成某个操作op。”?

(2)或者它的意思是:“每个进程在任何有限的步骤中完成某个操作op。这样一个进程就可以在k步骤中完成另一个进程,步骤为j步骤,其中k!= j。”?

通过阅读定义,我会理解意义(2)。然而,这对我来说没有任何意义,因为以k步为单位执行op并且以k + m步执行另一次的进程符合定义,但m步可以是等待循环。如果意思(2)是正确的,任何人都可以向我解释,为什么这描述了无等待?

与(2)相反,意思是(1)将保证op以相同的步数k执行。因此,不需要任何额外的步骤,例如,在等待循环中。

哪种含义是正确的,为什么?

非常感谢,

SEMA

4 个答案:

答案 0 :(得分:1)

答案意味着定义(2)。如果等待的进程无限期地运行,请考虑等待循环可能永远不会终止:“无论其他进程的执行速度如何”。

因此,无限等待循环有效地意味着给定进程可能无法在有限数量的步骤中完成操作。

答案 1 :(得分:1)

当这样的理论论文的作者写出“有限数量的步骤”时,它意味着存在一些常数k(你不一定知道k),所以这个数字步数小于k(即你的等待时间肯定不会无限)。

我不确定'op'在这种情况下意味着什么,但通常,当你有一个多线程程序时,线程可能会等待彼此做某事。

示例:一个线程有一个锁,其他线程等待这个锁被释放,直到它们可以运行。

这个例子不是等待释放的,因为如果持有锁的线程没有机会做任何操作(这很糟糕,因为这里的要求是其他线程将继续而不管其他任何线程),其他线程是注定的,永远不会取得任何进展。

其他示例:在同一地址上有几个线程尝试CAS

这个例子是等待的,因为虽然除了一个之外的所有线程都会在这样的操作中失败,但无论选择哪个线程运行都会有进展。

答案 2 :(得分:1)

听起来你担心定义 2 会允许无限等待循环,但是这样的循环无限 - 不能满足完成的要求在有限步数内。

我采取“等待”意味着取得进展不需要任何参与者等待其他参与者完成。如果需要这样的等待,如果一个参与者挂起或操作缓慢,其他参与者也会受到类似的影响。

相比之下,通过无等待的方法,每个参与者都会尝试其操作并适应与其他参与者的竞争性互动。例如,每个线程可能会尝试推进某个状态,如果两个尝试“在同一”时间,只有一个应该成功,但不需要任何“失败”重试的参与者。他们只是认识到其他人已经完成了工作,他们继续前进。

与其专注于“等待轮到行动”,一种无等待的方法鼓励“试图帮助”,承认其他人也可能同时试图提供帮助。每个参与者都必须知道如何检测成功,何时重试以及何时放弃,确信尝试只是失败,因为其他人先进入那里。只要工作完成,哪个线程完成就没关系。

答案 3 :(得分:0)

等待实质上意味着它不需要在多处理环境中使用同步。 “有限步数”是指在同步设备(例如互斥锁)上等待未知 - 并且可能无限(死锁) - 时间长度,而另一个进程执行临界区时。