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

问题描述 投票:0回答:1

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

Reader:
        wait(mutex)
        wait(w)

        // Read

        signal(w)
        signal(mutex)


Writer:
        wait(w)
        wait(mutex)

        // Write

        signal(w)
        signal(mutex)

这个解决方案有意义吗?

c linux semaphore
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.