リーダライタ問題に対する2番目のアルゴリズムを理解するのは本当に苦労しています。私は一般的な概念を理解しています。作家は読者よりも優先されます(読者は飢えている可能性があります)。私はこのアルゴリズムReader/Writer Locks in C++の条件変数の実装を理解しています。しかし、セマフォー& mutexの実装は私には意味がありません。これはウィキペディアからの例です:リーダライタへの2番目のアルゴリズム解決策
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つのセマフォ(ミューテックス3、R、およびミューテックス1)リーダーロックにするためのものであるかを理解していません。 readcountには1つのセマフォーで十分ではありませんか?
アルゴリズムやWikipediaのページへのリンクを投稿して、同じことをすべて確認してください。 – gbulmer