读者和写者
- 读写两组进程,共享一个文件,多个读者可以同时访问文件,多个写者不可以同时访问文件,写者和读者也不可以同时访问文件
- 共享读;独占写
- 特征:1,资源被谁占有;2,写者改变资源,读者不改变资源
- 分析:写者关心文件是否被占有;读者作为一个团体去读文件,第一个人关心文件是否被占有;读者团中间的人增加读者团的人数;最后一个读者需要释放文件
semaphore mutex = 1;读者i(){while(1){p(mutex);if (read_count == 0){p(s);}read_count++;v(mutex);p(mutex);count--;v(mutex);if (read_count == 0){v(s);}}
}写者i(){while(1){p(s);写操作;v(s);}
}
例题
- 一根绳子横跨峡谷两边,猴子通过绳索过峡谷,只要朝着相同方向,同一时刻可以通过多只猴子,但是如果是相反的方向,同时有猴子通过就会产生死锁,如果一只猴子想过峡谷,必须看是否有相反方向的猴子通过绳索,请使用pv操作解决问题
- 猴子属性分为 第一只 中间 最后一只
- 代码
semaphore mutex = 1;
semaphore s = 1;//桥
左边猴子(){while(1){p(mutex);if (left_count == 0){p(s);}left_count++;v(mutex);过桥;p(mutex);left_count--;if (left_count == 0){v(s);}v(mutex);}
}
生产者和消费者 以及 读者和写者之间的区别
- 资源的影响 消费者会改变资源;但是读者不会改变资源
- 读者表现一个团体的性质,需要计数,按照属性分为 第一个 中间的人 和 最后一个人;生产者和消费者计数是对资源的利用和剩余进行计数。