我有一个由步骤 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 完成。