读者优先与写者优先有什么区别

2025-04-09 10:58:37
推荐回答(2个)
回答1:

读者写者问题是这样一种情况,就是允许对资源进行两种类型的操作(读和写)。而写操作是排他的(排斥读者,同样排斥其他写者),读操作是共享的(多个读者可读,排斥写者)。
这就存在两种策略:
1.读者优先(强读者同步Strong reader synchronization):总是给读者优先权,只要写者当前没有进行写操作,读者就能获得访问权。这种情况存在于读者很多,写者不经常更新的时候使用,如图书馆参考数据库采用读者优先比较好。
2.写者优先(强写者同步Strong writer synchronization):通常把优先权交给写者,而将读者延迟到所有等待的或活动的写者都完成了为止。这种情况存在于经常更新的系统,而读者对最新信息感兴趣,如机票预定系统,写者进行机票价格的更新,读者获取当前机票价。

简单的说就是资源没人占用,则谁先到先用,用的时候上锁,读者上读者锁,写者上写者锁。
1.假设先来的读者上读者锁,接下来再a)来读者,可以读资源,将读者计数器+1,b)来写者则等待(阻塞或者不断尝试)直到读者释放资源(计数器为0),选取一个写者开始写
2.若先来的是写者上写者锁,这时候又来了比如N个读者,M个写者等待(写者锁排他),这时候要是a)读者优先,则写者释放锁后,让等候的N个读者先读(其他写者接着等着等,变为情况1),这时候要是b)写者优先,则写者释放锁后,让等候的M个中的一个写者写,读者接着等待直到没有写者为止(等的的M个写者全写完还有中途再来的写者)。

读者写者问题本身就存在着饿死的情况。

回答2:

(1)读者优先的附加限制:如果一个读者申请进行读操作时已有另一读者正在进行读操作,则该读者可直接开始读操作。(2)写者优先的附加限制:如果一个读者申请进行读操作时已有另一写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。

这是我这学期课程设计任务书上的解释