在对并行程序进行编程的过程中,我遇到的问题是使用2个值的唯一组进行创建。换句话说,这是握手问题,每个人都必须与其他人握手。握手后,有一个晚餐等待所有参与者。
有两种方法我知道如何做到这一点:
对所有男人进行编号并让每个男人保持平行,他们会与数量较少的男性握手。在最后一个号码的男人要求大家握手之前,晚餐会很冷。
我们会告诉每个人有多少参与者并根据该值创建条件,所以每个人都会动摇aprox。平行的手数相等。晚餐会很冷,因为参与者不擅长数学。 (在这种情况下,人们可以像其他人一样行事)
我们也可以交换男人的数字和摇晃比较,倍增等。问题是我们想要在晚餐之前吃晚餐,等待一个线程或者做很多条件会减慢这个过程。
还有其他更有效的方法吗?
答案 0 :(得分:0)
我不确定你有多少受到“数学不好”的限制,但你可能会看一下How to automatically generate a sports league schedule,并提到http://en.wikipedia.org/wiki/Round-robin_tournament的答案。
在计算同步原语的有效性时,您需要分别跟踪等待滞后进程赶上的时间,以及同步本身所花费的时间。如果你的时间实际上是等待落后者赶上,你需要加快速度(例如通过更均匀地分散工作)或者避免等待他们的必要性 - 加快每个人等待其他人之后发生的事情可能没多大帮助。