2

在编写并行程序很多时候,我遇到了制作具有唯一组 2 值的东西的问题。换句话说,这是握手问题,每个人都必须与其他人握手。握手后,有一个晚餐等待所有参与者。

我知道有两种方法可以做到这一点:

  1. 给所有男人编号,让每个男人平行,他们将与人数较少的男人握手。在最后一个号码的人要求每个人握手之前,晚餐会变冷。

  2. 我们会告诉大家有多少参与者,并根据这个价值创造条件,所以每个人都会动摇。平行的手数相等。晚餐会很冷,因为参与者数学不好。(在这种情况下,人们可以像其他人一样行事)

我们也可以用人来交换数字,用摇晃来比较、乘法等。问题是我们想在天冷之前吃掉晚餐,等待一个线程或制造很多条件会减慢这个过程。

还有其他更有效的方法吗?

4

1 回答 1

0

我不确定你有多少受到“数学不好”的限制,但你可能会看看如何自动生成体育联赛时间表,有很好的答案,参考http://en.wikipedia.org/wiki/循环赛

在计算同步原语的效率如何时,您需要分别跟踪等待滞后进程赶上所花费的时间,以及同步本身所花费的时间。如果您的时间实际上是花在等待落后者赶上,您需要加快他们的速度(例如通过更均匀地分配工作)或避免等待他们的必要性 - 加快在每个人都等待其他人之后发生的事情可能没有多大帮助。

于 2012-07-04T18:44:47.383 回答