如何实现Reader Writer问题,一次只允许一个阅读器,并且只有当没有编写者想要修改共享结构时?
Reader:
wait(mutex)
wait(w)
// Read
signal(w)
signal(mutex)
Writer:
wait(w)
wait(mutex)
// Write
signal(w)
signal(mutex)
这个解决方案有意义吗?
答案 0 :(得分:0)
线程优先级是你的朋友,如果你对它的严格要求也是PREEMPT_RT内核补丁集。使作者比读者更优先。
我假设您有两个信号量来a)保护对结构的访问(互斥),以及b)标记结构已更新(w)。在这种情况下,您无需在编写器中等待w,也无需在阅读器中发出信号。读者应该等待w,然后等待互斥,阅读,然后发布互斥。作者应该等待互斥,写入,然后发出互斥和w。信号。
编写器线程和PREEMPT_RT内核(解决优先级反转)的优先级意味着无论读者正在做什么,编写器都会尽快给予互斥(实际上读者的优先级会暂时上升到确保尽可能快地发出互斥信号。