【问题标题】:How to prempt all reader as 1 writer comes in reader writer locks?当 1 个作者进入读写器锁时,如何抢占所有读者?
【发布时间】:2012-06-15 18:40:18
【问题描述】:

以上是作者优先于读者的读者写问题解决方案。

假设,最初 1000 个读取器开始执行代码来读取数据(假设读取数据代码很大,每个线程需要 1 秒)然后 1 个写入器尝试写入数据。所以作者必须等待 1000 个读者先完成(即 1000 秒)。

例如,在一个应用程序中,1 个写入器更新时间,许多读取器读取时间,写入器必须等待 1000 秒,这是巨大的。

是否有任何解决方案,当作者尝试写入时,所有读者将被抢占,直到作者完成其任务?

【问题讨论】:

  • 哇!这篇文章真的需要重新格式化。但是,我无法理解这样做。请花一点时间,删除非代码文本的缩进。
  • 我已经格式化了问题

标签: multithreading mutex semaphore data-synchronization readerwriterlock


【解决方案1】:

“抢占”究竟是什么意思?你不能把它们从 CPU 上取下来,因为这并不能解决问题。读者希望他们正在阅读的状态是稳定的。如果你“暂停”阅读器,获取写锁,修改状态,释放锁并恢复阅读器,他们将看到状态改变和故障。

读锁的目的是确保读取器执行时数据不会改变。如果您删除该属性,则此锁定策略将不再有意义。

【讨论】:

  • 无论您解释什么都是正确的,这是我的疑问。如果所有读者都在执行,那么作者来了,必须写(不应该等他)需要做什么?因为如果作者等待 1 位读者就可以,但如果阅读 10000 位读者,那么显然这将是作者的延迟。
【解决方案2】:

由于读者的数量远远多于作者,您最终可能会饿死作者线程。您可以引入的一个简单策略是,如果写入者正在等待写入,您可以停止向即将到来的读取请求授予更多读取锁。这至少可以确保作者不会饿死。 writer 的延迟取决于实际用例。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
  • 2012-08-21
相关资源
最近更新 更多