【问题标题】:Readers/Writers synchronization - order of releasing locks in fair versionReaders/Writers 同步 - 公平版本中释放锁的顺序
【发布时间】:2016-04-18 18:35:59
【问题描述】:

我正在经历the completely fair solution to the Readers/Writers problem,释放锁的顺序让我感到困惑。我想知道我们是否可以在reader() 函数中交换释放serviceQueue 锁和readCountAccess 锁的顺序。如果顺序无关紧要,以这种方式释放锁似乎违反直觉。但是我看不出以相反的顺序释放锁有什么问题(首先readCountAccess和然后然后serviceQueue锁)。

【问题讨论】:

    标签: multithreading concurrency synchronization theory


    【解决方案1】:

    这可能是你可以证明首先释放更广泛的锁(在本例中为serviceQueue)的时代的残余,如果这不会影响正确性,因为另一个线程可以在你释放时立即继续获取它更窄的锁。

    假设每次获取或释放需要 1 个时间单位,每个其他操作需要 0 个时间单位,一个读取器刚刚在时间 0 增加读取器计数器,并且在服务等待队列中还有另一个读取器。

    • 如果先释放readCountAccess,然后释放serviceQueue,则下一个读者可以不早于时间3获得serviceQueue互斥锁。因此最早可以通过读锁注册仪式完成的是在时间6。这里的受益方将是其他等待退出的读者,他们不那么重要,因为他们应该不能同时发布resourceAccess(因为我们的原始读者刚刚注册了)。

    • 1234563早在5点锁定注册仪式。

    尽管如此,我仍然更喜欢使用对称方案进行解锁 - 它不易出错,具有更广泛的认可度,而且目前它在任何方面都比上述版本更糟糕的举证责任将落在怀疑者。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 2019-09-09
      • 1970-01-01
      • 2021-02-22
      相关资源
      最近更新 更多