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