gpt4 book ai didi

java - 了解 ReusableBarrier 问题(来自 'Little Book of Semaphores' )

转载 作者:行者123 更新时间:2023-12-01 15:51:30 26 4
gpt4 key购买 nike

问题描述如下:

通常,一组协作线程会循环执行一系列步骤,并且每个步骤后在屏障处同步。对于这个应用程序,我们需要一个可重复使用的当所有线程都通过后,屏障会锁定自身。

给出的解决方案是:

1 # rendezvous
2
3 mutex.wait()
4 count += 1
5 if count == n:
6 turnstile2.wait() # lock the second
7 turnstile.signal() # unlock the first
8 mutex.signal()
9
10 turnstile.wait() # first turnstile
11 turnstile.signal()
12
13 # critical point
14
15 mutex.wait()
16 count -= 1
17 if count == 0:
18 turnstile.wait() # lock the first
19 turnstile2.signal() # unlock the second
20 mutex.signal()
21
22 turnstile2.wait() # second turnstile
23 turnstile2.signal()

假设我们将此屏障用于 2 个线程,并通过此屏障泵送 100 个线程。当第二个线程解锁 Turnstile(7) 并到达第 9 行时,现在,线程 3 出现,
它增加计数,
count > n 因此它释放互斥体,
由于十字转门已解锁,因此也达到了临界点,
同样,线程4、线程5、线程6可以执行临界点,执行次数超过2次。
是什么阻止他们在线程 2 之前通过屏障?还是我的理解有误?

最佳答案

问题陈述指出(第 22 页):

You can assume that there are n threads and that this value is stored in a variable, n, that is accessible from all threads.

因此,如果 n=2 并且有 100 个线程,则违反了此假设,并且该解决方案将不起作用。

关于java - 了解 ReusableBarrier 问题(来自 'Little Book of Semaphores' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5925204/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com