问题1:读者写者问题
层次1:只有读者,最多允许有k个读者,用p,v操作写出程序。
int main()
{
int rspace = k;
cobegin
read_1();
read_2();
……
read_n();
coend
}
read_i()
{
p(rspace);
……
v(rspace);
}
这个操作,需要设置信号灯rspace来控制是否达到了k个人数,当达到k个人数的时候rspace == 0,这个时候需要挂起。
层次2:一个读者,一个写者问题。
int main()
{
int mutex = 1;
cobegin
read_i();
write_i();
coend
}
read_i()//i = 1, 2, ……
{
p(mutex);
……
v(mutex);
}
write()//i = 1, 2, ……
{
p(mutex);
……
v(mutex);
}
这是一个临界资源,对于临界资源,需要设置信号灯mutex控制只有一个进程可以访问。
层次3:有多名读者,有多名写者。
int main()
{
int mutex = 1;//这个是读和写的互斥
int mutex1 = 1;//这个是保护cnt等变量
cobegin