【发布时间】:2011-02-06 15:40:21
【问题描述】:
我有一个由步骤 A、B 和 C 组成的构建器;以及由步骤 U、V 和 W 组成的第二个构建器:如何“阻止”步骤 U 直到步骤 A 和 B 完成?所以基本上我希望步骤 C 和 U 彼此并行运行。
我的第一个想法是引入两个互锁,a和b:步骤A需要锁a,步骤B需要锁b,步骤U同时需要a和b。
但在这种情况下,执行顺序是 A->U->B,而不是我想要的 A->B->U。原因:步骤对锁很贪心。步骤 U 由于锁 a 而被阻塞,但尽管它需要锁 b。这会阻塞步骤 B,直到步骤 U 完成。
【问题讨论】: