2013-02-01 168 views
0

我有一个关于读写器线程的问题,我不想过度复杂的东西,所以我来这里寻求一些建议。C++信号量(读/写)

我有一个数组,最终将被4个线程读取并写入3.(1个读取器3个读/写)。我的目标是以某种方式没有任何读操作阻塞另一个线程,同时有任何写操作阻塞所有线程直到完成。我很确定我知道如何用每个线程的一个信号量做到这一点,但是有什么方法可以用一个二进制,计数或互斥信号量(或每个线程的信号量小于1个信号量)来完成此任务。我将使用VxWorks信号量库。

回答

1

除非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

+0

这实际上是在寻找不幸的是,这仅仅受vxWorks 6.6及更高版本的支持,否则就像其他人认为它似乎是“读者和作者”的问题。 – SirRoot

0

既然你只有一个阅读器,它完全等价于互斥问题(只有一个线程可以)。直接使用单个二进制信号量就足够了。一开始,P进入,V离开。

+1

读/写线程只写在一个特定的参数文件中,所以在写入时读取的次数会更多。我希望4个线程在阅读时不会阻塞对方。 – SirRoot

+0

@SirRoot在这种情况下,您可以尝试实现http://en.wikipedia.org/wiki/Readers-writers_problem。但它可能不会比读者互相阻碍的速度更快。 – zch