在编写并行程序的过程中,我经常遇到一个问题,即用2个值组成一个唯一的组。换句话说,这就是握手问题,每个人都要和其他人握手,握手后有一顿晚餐等着所有的参与者。
我知道有两种方法可以做到这一点:
数点所有的人,使他们彼此平行,他们要与人数较少的人握手晚餐会很冷,最后一个号码的人请大家握手。
我们会告诉每个人有多少参与者,并根据这个价值创造条件,所以每个人都会摇摆不定平行的手的数量相等晚餐会很冷,因为参加者数学不好。(在这种情况下,人们可以表现得像其他人)
我们也可以用人来交换数字,用颤抖来比较、乘法等。问题是,我们想在晚饭冷之前吃掉它,等待一根线或制造许多条件会减慢这个过程。
还有其他更有效的方法吗?

最佳答案

我不知道你有多少被“数学不好”所束缚,但你可以看看How to automatically generate a sports league schedule,得到的答案是指http://en.wikipedia.org/wiki/Round-robin_tournament
在计算同步原语的效率与否时,需要分别跟踪等待滞后进程赶上的时间和在同步本身中花费的时间。如果你的时间实际上是在等待落后者赶上,你需要加快他们的速度(例如,通过更均匀地分配工作)或避免等待他们的必要性——加快每个人都在等待之后发生的事情对其他人可能没有多大帮助。

关于algorithm - 高效的并行握手(组合),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11333294/

10-15 03:55