读者 - 作家:一次一个读者,作家优先

时间:2017-12-21 17:51:38

标签: c linux semaphore

如何实现Reader Writer问题,一次只允许一个阅读器,并且只有当没有编写者想要修改共享结构时?

Reader:
        wait(mutex)
        wait(w)

        // Read

        signal(w)
        signal(mutex)


Writer:
        wait(w)
        wait(mutex)

        // Write

        signal(w)
        signal(mutex)

这个解决方案有意义吗?

1 个答案:

答案 0 :(得分:0)

线程优先级是你的朋友,如果你对它的严格要求也是PREEMPT_RT内核补丁集。使作者比读者更优先。

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

编写器线程和PREEMPT_RT内核(解决优先级反转)的优先级意味着无论读者正在做什么,编写器都会尽快给予互斥(实际上读者的优先级会暂时上升到确保尽可能快地发出互斥信号。