私はこのコードを持っています、それは相互排除アルゴリズムです
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のスレッドを使用して実際のコードでスレッドを変換する方法を理解するのに役立つ提案をお願いします
私の悪い英語でごめんなさい
相互排除は、通常、最も単純な形式で、メソッドを同期としてマークすることによって実現されます。オブジェクトのメソッドを同期済みとしてマークすることにより、一度に1つのスレッドのみがそのオブジェクトのメソッドを実行できます。メソッドを所有するオブジェクトはモニターです。
さらに、コード自体に同期ブロックを定義して、モニターとして機能するオブジェクトを渡すことができます。
実行したいロジックを持つRunnableオブジェクトを定義することで、同じことをより簡単に実現できると思います。相互排除が必要な場合は、同期メソッドを定義します。
次に、そのRunnableインスタンスを必要な数のスレッドに渡すことができます。それらはすべて同じRunnableを参照するため、同期されたメソッドへの呼び出しは相互に排他的です。
これが唯一の方法ではありませんが、それはあなたが求めているものでなければなりません。お役に立てれば。
このコードは相互に排他的ではありません。この実行を検討してください-