.读者优先
1.写者、读者互斥访问文件资源。
2.多个读者可以同时访问文件资源。
3.只允许一个写者访问文件资源。
.算法
Program reders writers;
Var r_w_w:semaphore;
mutex:semaphore;
read_count:integer;
Procedure writers;
begin
P(r_w_w);
{writer ops}
V(r_w_w);
End;
Procedure reders;
begin
P(mutex);
read_count:=read_count+1;
if read_count=1 Then P(r_w_w);
V(mutex);
{read ops}
P(mutex);
read_count:=read_count-1;
if read_count=0 Then V(r_w_w);
V(mutex);
end;
begin
read_counr:=0;
r_w_w.value:=1;
mutex.value:=1;
cobegin
r1:reder;...;rm:reder;
w1:writer;...;wn:writer;
coend
end;
.写者优先
1.写者线程的优先级高于读者线程。
2.当有写者到来时应该阻塞读者线程的队列。
3.当有一个写者正在写时或在阻塞队列时应当阻塞读者进程的读操作,直到所有写者进程完成写操作时放开读者进程。
4.当没有写者进程时读者进程应该能够同时读取文件。
.算法
Program reders writers;
Var r_w_w:semaphore;
mutex:semaphore;
mutex2:semaphore;
s:semaphore;
read_count:integer;
write_count:integer;
Procedure writers;
begin
P(mutex2);
write_count:=write_count+1;
if write_count=1 Then P(s);
V(mutex2);
P(r_w_w);
{writer ops}
V(r_w_w);
P(mutex2);
write_count:=write_count-1;
if write_count=0 Then V(s);
V(mutex2);
End;
Procedure reders;
begin
P(s);
P(mutex);
read_count:=read_count+1;
if read_count=1 Then P(r_w_w);
V(mutex);
V(s);
{read ops}
P(mutex);
read_count:=read_count-1;
if read_count=0 Then V(r_w_w);
V(mutex);
end;
begin
read_count:=0;
write_count:=0;
r_w_w.value:=1;
mutex.value:=1;
mutex2.value:=1;
s.value:=1;
cobegin
r1:reder;...;rm:reder;
w1:writer;...;wn:writer;
coend
end;