簡體   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