<!--StartFragment-->
int readcount, writecount; (initial value = 0)
semaphore mutex_1, mutex_2, mutex_3, w, r ; (initial value = 1)
READER
wait(mutex_3);
wait(r);
wait(mutex_1);
readcount := readcount + 1;
if readcount = 1 then wait(w);
signal(mutex_1);
signal(r);
signal(mutex_3);
reading is performed
wait(mutex_1);
readcount := readcount - 1;
if readcount = 0 then signal(w);
signal(mutex_1);
WRITER
wait(mutex_2);
writecount := writecount + 1;
if writecount = 1 then wait(r);
signal(mutex_2);
wait(w);
writing is performed
signal(w);
wait(mutex_2);
writecount := writecount - 1;
if writecount = 0 then signal(r);
signal(mutex_2);
<!--[if !supportEmptyParas]--> <!--[endif]-->
댓글 0