【发布时间】:2012-04-02 10:02:28
【问题描述】:
我很难理解读者-作者问题的第二种算法。我理解一般概念,即作者将优先于读者(读者可能会挨饿)。我什至了解Reader/Writer Locks in 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)的用途。一个信号量还不够读取计数吗?
【问题讨论】:
-
能否请您发布一个指向算法或维基百科页面的链接,以确保我们都在看同一个东西?
标签: algorithm concurrency synchronization