【问题标题】:Reader-Writer: one reader at a time, and writer priorityReader-Writer:一次一位读者,作者优先
【发布时间】:2017-12-21 17:51:38
【问题描述】:

如何实现Reader Writer问题,一次只允许一个读者,并且只有在没有写者想要修改共享结构的情况下?

Reader:
        wait(mutex)
        wait(w)

        // Read

        signal(w)
        signal(mutex)


Writer:
        wait(w)
        wait(mutex)

        // Write

        signal(w)
        signal(mutex)

这个解决方案有意义吗?

【问题讨论】:

  • 目前您可能会遇到死锁。 wait 的顺序和signal 的顺序必须符合特定模式,而您的作者不符合。
  • @Someprogrammerdude,哦,对了,我的错。谢谢
  • 请不要破坏使答案/cmets无效的信息:(
  • @MartinJames 抱歉:

标签: c linux semaphore


【解决方案1】:

线程优先级是您的朋友,如果您对此要求严格,那么 PREEMPT_RT 内核补丁集也是如此。使作者的优先级高于读者。

我假设您有两个信号量来 a) 保护对结构的访问 (mutex),以及 b) 标志结构已更新 (w)。在这种情况下,您不需要在 writer 中等待 w,也不需要在 reader 中发出 w 信号。读者应该等待 w,然后等待互斥锁,读取,然后发布互斥锁。 writer 应该等待 mutex,写入,然后发出 mutex 和 w 信号。

写入线程的优先级和 PREEMPT_RT 内核(解决优先级倒置)意味着无论读取器在做什么,写入器都将尽快获得互斥锁(实际上读取器的优先级将暂时提高到确保它尽快到达信号互斥点)。

【讨论】:

  • 我只需要用信号量来解决它,不需要任何其他东西。不过,还是谢谢你的回答。
猜你喜欢
  • 2017-06-10
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多