我有一个关于读者/作者线程的问题,我不想让事情过于复杂,所以我来这里寻求一些建议。
我有一个数组,最终将由 4 个线程读取并由 3 个线程写入。(1 个读取器 3 个读/写)。我的目标是不让任何读操作阻塞另一个线程,同时让任何写操作阻塞所有线程直到完成。我很确定我知道如何使用每个线程一个信号量来做到这一点,但是有没有办法只用一个二进制、计数或互斥信号量(或每个线程少于 1 个信号量)来完成此操作。我将使用 VxWorks 信号量库。
我有一个关于读者/作者线程的问题,我不想让事情过于复杂,所以我来这里寻求一些建议。
我有一个数组,最终将由 4 个线程读取并由 3 个线程写入。(1 个读取器 3 个读/写)。我的目标是不让任何读操作阻塞另一个线程,同时让任何写操作阻塞所有线程直到完成。我很确定我知道如何使用每个线程一个信号量来做到这一点,但是有没有办法只用一个二进制、计数或互斥信号量(或每个线程少于 1 个信号量)来完成此操作。我将使用 VxWorks 信号量库。
除非 VxWorks 支持像 POSIX one 这样的 shared/rwlock,否则恐怕它会比简单的更复杂一些。
我建议使用 POSIX pthread_rwlock_t
,如果你有的话。如果您不这样做并且 VxWorks 不提供任何等效的替代方案,您将不得不使用其他原语构建一个。可以在 2 个信号量和 3 个互斥锁以及两个整数变量之上构建一个 rwlock。参见“Readers”和“Writers”的并发控制;PJ Courtois、F. Heymans 和 DL Parnas;MBLE研究实验室;比利时布鲁塞尔。
由于您只有一个阅读器,因此完全等同于互斥问题(只能进入一个线程)。直接使用单个二进制信号量就足够了。以 1 初始化,P 进入,V 离开。