我有一个关于读写器线程的问题,我不想过度复杂的东西,所以我来这里寻求一些建议。C++信号量(读/写)
我有一个数组,最终将被4个线程读取并写入3.(1个读取器3个读/写)。我的目标是以某种方式没有任何读操作阻塞另一个线程,同时有任何写操作阻塞所有线程直到完成。我很确定我知道如何用每个线程的一个信号量做到这一点,但是有什么方法可以用一个二进制,计数或互斥信号量(或每个线程的信号量小于1个信号量)来完成此任务。我将使用VxWorks信号量库。
我有一个关于读写器线程的问题,我不想过度复杂的东西,所以我来这里寻求一些建议。C++信号量(读/写)
我有一个数组,最终将被4个线程读取并写入3.(1个读取器3个读/写)。我的目标是以某种方式没有任何读操作阻塞另一个线程,同时有任何写操作阻塞所有线程直到完成。我很确定我知道如何用每个线程的一个信号量做到这一点,但是有什么方法可以用一个二进制,计数或互斥信号量(或每个线程的信号量小于1个信号量)来完成此任务。我将使用VxWorks信号量库。
除非VxWorks支持某种类型的shared/rwlock like the POSIX one,否则恐怕这会比简单一点复杂。
我会建议使用POSIX pthread_rwlock_t
,如果你有它。如果你不这样做,并且VxWorks没有提供任何等价的选择,你将不得不使用其他原语构建一个。可以在2个信号量和3个互斥量以及两个整数变量之上构建一个rwlock。见Concurrent Control with "Readers" and "Writers"; P.J. Courtois, F. Heymans, and D.L. Parnas; MBLE Research Laboratory; Brussels, Belgium。
这实际上是在寻找不幸的是,这仅仅受vxWorks 6.6及更高版本的支持,否则就像其他人认为它似乎是“读者和作者”的问题。 – SirRoot