读者-写者问题思想

读者-写者问题是并发编程中的经典问题,关注读写操作的同步。本文探讨了两种策略:读者优先和写者优先。在读者优先策略中,多个读者可以同时读取数据,而写者必须等待所有读者完成读取才能开始写操作。而在写者优先策略下,一旦有写者到来,即使有正在读取的读者,也只需要等待当前读者完成,后续的读者会被挂起,确保写者的优先权。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

读者-写者问题是一个经典的并发程序设计问题,是经常出现的一种同步问题。计算机系统中的数据(文件、记录)常被多个进程共享,但其中某些进程可能只要求读数据(称为读者);另一些进程则要求修改数据(称为写者)。就共享数据而言,reader和writer是两组并发进程共享一组数据区,要求:

(1)允许多个读者同时执行读操作;

(2)不允许读者、写者同时操作;

(3)不允许多个写者同时操作。

1)读者优先

对于读者优先,应满足下列条件:

如果新读者到:

1、无读者、写者,新读者可以读;

2、有写者等待,但有其它读者正在读,则新读者也可以读;

3、有写者写 ,新读者等待。

如果新写者到:

1、无读者,新写者可以写;

2、有读者,新写者等待;

3、有其他写者,新写者等待。

读者优先的设计思想:读进程只要看到有其它读进程正在读,就可以继续进行读;写进程必须等待所有读进程都不读时才能写,即使写进程可能比一些读进程更早提出申请。该算法只要还有一个读者在活动,就允许后续的读者进来,该策略的结果是,如果有一个稳定的读者流存在,那么这些读者将在到达后被允许进入。而写者就始终被挂起,直到没有读者为止。


2)写者优先1

为了解决以上问题,写者优先的设计思想是在一个写者到达时如果有正在工作的读者,那么该写者只要等待正在工作的读者完成,而不必等候其后面到来的读者就可以进行写操作。注意 ,该算法当一个写者在等待时,后到达的读者是在写者之后被挂起,而不是立即允许进入。

写者优先2

为了保证写者相对于读者的优先,需要提高写者进程的优先级

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值