2013-02-10 3 views
0

Я этот код, это взаимное исключение алгоритмвзаимное исключение, используя нить ява

turn = 0 // shared control variable  

while (turn != i); 

// CS 

turn = (turn + 1) % n; 

Я знаю, как работает нить, но на самом деле я немного слаб в использовании нити в Java поэтому, пожалуйста, любое предложение, чтобы помочь мне чтобы понять, как преобразовать его в реальном коде, используя нить яванского

извините за мой плохой английский

+0

Что ваш вопрос ? –

+0

@ RalfH http://stackoverflow.com/questions/14803850/mutual-exclusion-code –

+0

Хорошо, но на это был дан ответ. Каков ваш вопрос _here_? –

ответ

2

взаимного исключения, как правило, достигается, в простейшей форме, путем маркировки способа, как синхронизируются. Помещая метод объекта как синхронизированный, только один поток может когда-либо выполнять метод этого объекта за раз. Объектом, владеющим этим методом, является монитор.

Кроме того, вы можете определить синхронизированный блок в самом коде, передав ему объект в качестве монитора.

Я считаю, что вы могли бы добиться того же самого более простым способом, указав объект Runnable, у которого есть логика, которую вы хотите сделать. Если вы хотите взаимное исключение, определите синхронизированный метод.

Затем этот экземпляр Runnable может быть передан столько потоков, сколько вам нужно. Поскольку все они ссылаются на одно и то же Runnable, вызовы синхронного метода будут взаимоисключающими.

Это не единственный способ, но это должно быть то, что вам нужно. Надеюсь это поможет.

+0

спасибо hmmmm пожалуйста, не могли бы вы написать код? –

+1

Извините, я не могу сейчас. Пожалуйста, обратитесь к http://docs.oracle.com/javase/tutorial/essential/concurrency/simple.html или http://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html – EdH

+0

Без проблем спасибо так или иначе –

0

этот код не взаимоисключающими, считают это Execution-

  1. нить 0 вводит код и CS, а затем увеличивает поворот к 1 в последней строке.
  2. нить 1 входит в CS в свою очередь, равен 1, и остается
  3. Теперь нить 0 восходит к первой строке и наборы обращаются к 0, а затем входит в CS вместе с резьбой 1
Смежные вопросы