Решение второго алгоритма для чтения-записи

Мне очень трудно понять второй алгоритм проблемы читателей-писателей. Я понимаю общую концепцию, что писатели получат приоритет над читателями (читатели могут голодать).Я даже понимаю реализацию этого алгоритма с условными переменными Reader/Writer Locks в C++.Однако реализация семафора и мьютекса не имеет для меня никакого смысла. Вот пример из Википедии:

int readcount, writecount; (initial value = 0)
semaphore mutex 1, mutex 2, mutex 3, w, r ; (initial value = 1)

READER
  P(mutex 3);
    P(r);
      P(mutex 1);
        readcount := readcount + 1;
        if readcount = 1 then P(w);
      V(mutex 1);
    V(r);
  V(mutex 3);

  reading is done

  P(mutex 1);
    readcount := readcount - 1;
    if readcount = 0 then V(w);
  V(mutex 1);


WRITER
    P(mutex 2);
      writecount := writecount + 1;
      if writecount = 1 then P(r);
    V(mutex 2);

  P(w);
    writing is performed
  V(w);

  P(mutex 2);
    writecount := writecount - 1;
    if writecount = 0 then V(r);
  V(mutex 2);

[http://en.wikipedia.org/wiki/Readers-writers_problem][2]

Я не понимаю, для чего нужны три семафора (мьютекс 3, r и мьютекс 1) в блокировке чтения, разве одного семафора недостаточно для счетчика чтения?

5
задан Community 23 May 2017 в 12:31
поделиться