Запросы читателей и писателей Java Solution (условный семафор | Передача жезла) - PullRequest
1 голос
/ 08 марта 2012

Я пытаюсь реализовать псевдо-решение ниже в Java как часть задания. Псевдо для программы Readers Preference , в частности, самого процесса чтения. Есть сопровождающий процесс писателя, но чтобы сохранить вещи спартанскими, я не удосужился вставить это.

Process Reader[i=1 to M] {
  while (true) {
    /* Implementing <await (nw == 0) nr = nr+1;> */
    P(e);
    if (nw > 0) {dr = dr+1; V(e); P(r);}
    nr = nr + 1;
    if (dr > 0) {dr = dr-1; V(r);}
    else V(e);
    read the database;
    /* Implementing <nr = nr-1;> */
    P(e);
    nr = nr - 1;
    if (nr == 0 and dw > 0) {dw = dw-1; V(w);}
    else V(e);
  }
}

Первоначально я предполагал, что строка:

/* Implementing <await (nw == 0) nr = nr+1;> */

Было что-то вроде комментирования происходящего, но, просто перечитав это, я думаю, что это должно быть оператор if для управления семафором блокировки P (e). Ниже приведено то, что я реализовал в своем коде на основе вышеприведенного предположения.

if (nw == 0) {
  nr = nr++;
  try {
    e.acquire();//P(e)
  } catch (InterruptedException e) {
  }
}//end if

Вывод остального кода был немного беспорядочным, но, похоже, работает. Я использовал задержки с thread.sleep, чтобы сделать вывод на консоль более читабельным, и опять-таки это было нормально, хотя я с осторожностью относился к использованию задержек, поскольку это, скорее всего, могло повлиять на результаты, поскольку я давал процессам записи более длительная задержка Тем не менее, в теории система блокировки должна быть исправной, а задержки должны просто сделать вывод на консоль более читабельным.

Итак, правильно ли я использовать оператор if выше?

Можете ли вы дать мне какие-либо советы по выводу данных на консоль, чтобы доказать, что они работают должным образом (предпочтения читателей / предпочтения писателей)

1 Ответ

0 голосов
/ 12 марта 2012

Линия

/* Implementing <await (nw == 0) nr = nr+1;> */

- это атомарный процесс, приведенный ниже код выполняет это атомарно.

Если кого-то интересует другой вопрос, просто добавьте печатные заявления в разделе приобретение / выпуск.

...