2013-02-01 98 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