C ++信号量(读/写)

时间:2013-02-01 13:19:45

标签: c++ multithreading semaphore vxworks

我有一个关于读者/作者线程的问题,我不想让事情过于复杂,所以我来这里寻求一些建议。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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