我有这个代码,它是互斥算法
turn = 0 // shared control variable
while (turn != i);
// CS
turn = (turn + 1) % n;
我知道线程是如何工作的但是我在使用java中的线程方面有点弱,所以请任何建议帮助我理解如何使用java的线程在实际代码中转换它
抱歉我的英文不好答案 0 :(得分:3)
通常通过将方法标记为同步来以最简单的形式实现相互排斥。通过将对象的方法标记为synchronized,一次只能有一个线程执行该对象的方法。拥有该方法的对象是监视器。
此外,您可以在代码本身中定义一个synchronized块,并将该对象传递给它作为监视器。
我相信你可以通过定义一个具有你想要的逻辑的Runnable对象,以更简单的方式实现同样的目的。如果您想要互斥,请定义同步方法。
然后可以将Runnable实例传递给您需要的尽可能多的线程。由于它们都引用相同的Runnable,因此对synchronized方法的调用将是互斥的。
这不是唯一的方法,但它应该是你所追求的。希望这会有所帮助。
答案 1 :(得分:0)
这段代码并不相互排斥,请考虑执行 -