虽然我经常编写并行程序,但我遇到了制作具有 2 个值的唯一组的问题。换句话说,这是握手问题,每个人都必须与其他人握手。握手后,所有参与者都会共进晚餐。
我知道有两种方法可以做到这一点:
给所有的人编号,并为每个人编号,每个人将与编号较小的人握手。在最后一个号码的人要求大家握手之前,晚餐会变冷。
我们会告诉每个人有多少参与者,并根据该值创造条件,这样每个人都会摇一摇。平行的手数相等。晚餐会很冷,因为参与者的数学不好。 (在这种情况下,人们可以像其他人一样行事)
我们也可以用 man 交换数字,用 shaking 交换比较、乘法等。问题是我们想在天冷之前吃晚餐,等待一个线程或设置很多条件会减慢进程。
还有其他更有效的方法吗?
最佳答案
我不确定您在多大程度上受到“数学不好”的限制,但您可以看看 How to automatically generate a sports league schedule , 好的答案是指 http://en.wikipedia.org/wiki/Round-robin_tournament .
在计算同步原语的效率时,您需要分别跟踪等待滞后进程 catch 进度所花费的时间,以及同步本身所花费的时间。如果你的时间实际上是在等待落后者 catch 来,你需要加快他们的速度(例如,通过更均匀地分配工作)或避免等待他们的必要性 - 在每个人都等待其他人之后加快发生的事情可能帮助不大。
关于algorithm - 高效的并行握手(组合),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11333294/