繁体   English   中英

使用Java线程进行互斥

[英]mutual exclusion using thread of java

我有这个代码,这是互斥算法

turn = 0 // shared control variable    

while (turn != i);

// CS

turn = (turn + 1) % n;

我知道线程如何工作,但实际上我在使用Java中的线程方面并不弱,因此请提出任何建议以帮助我了解如何使用Java线程在真实代码中进行转换

对不起,我的英语不好

互斥通常以最简单的形式通过将方法标记为同步来实现。 通过将对象的方法标记为已同步,一次只能有一个线程执行该对象的方法。 拥有该方法的对象是监视器。

另外,您可以在代码本身中定义一个同步块,将对象传递给它以充当监视器。

我相信您可以通过定义具有您想要执行的逻辑的Runnable对象,以更简单的方式实现相同的目的。 在需要互斥的地方,定义一个同步方法。

然后,可以将该Runnable实例传递给所需的多个线程。 由于它们都引用相同的Runnable,因此对同步方法的调用将是互斥的。

这不是唯一的方法,但应该是您所追求的。 希望这可以帮助。

此代码不是互斥的,请考虑以下执行-

  1. 线程0输入代码和CS,然后在最后一行中递增到1。
  2. 线程1等于1进入CS并停留
  3. 现在线程0返回第一行,并将turn设置为0,然后与线程1一起进入CS

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM