read_write_mutex von boost
-
Hallo,
ich benötige für mein (plattformunabhängiges) Projekt mit boost ein read_write_mutex. Boost hatte solch ein Mutex, welches aber bei der Release-Version von 1.33 entfallen ist.
Ich habe leider keine Informationen gefunden, ob, und wann, diese Klasse(n) wieder aufgenommen werden. Was soll ich nun tun? Selbst was zusammenfrickeln oder die Version vom CVS nehmen (http://boost.cvs.sourceforge.net/boost/boost/boost/thread/read_write_mutex.hpp?view=markup)?Ich bin relativ verwirrt, da ein solches Mutex doch eine Grundlage für jedes Programm darstellt und ohne ein solches Mutex vernünftige Thread-Programmierung unmöglich ist.
Hilfe!
:xmas1: :xmas2:
:xmas2: :xmas1:
-
So weit ich mich dunkel erinnern kann, ist die Unterscheidung zwischen Lesen und Schreiben bei dem Mutex-Konzept wieder raus geflogen, weil es wohl Probleme grundsätzlicher Natur gab.
Verfolgt man den von Dir angegebenen Link, so liest man im Kommentar:// This implementation is susceptible to self-deadlock, though.... template<typename Mutex> struct read_write_mutex_implBem.: susceptible heißt anfällig
Du kannst statt dessen aber das normale boost::mutex benutzen. Die Einschränkungen ist dann eben, dass auch zwei nur lesende Prozesse gegeneinander verriegelt werden, was nicht notwendig wäre. Aber damit kann man meines Erachtens leben.
Gruß
Werner
-
Werner Salomon schrieb:
Du kannst statt dessen aber das normale boost::mutex benutzen. Die Einschränkungen ist dann eben, dass auch zwei nur lesende Prozesse gegeneinander verriegelt werden, was nicht notwendig wäre. Aber damit kann man meines Erachtens leben.
Das ist ja gerade das Problem. Mutex(e) (boost::mutex) klappen super, aber read_write_mutex(e) wären Ideal.
Naja, ich werde dann mal sowas wie typedef boost::mutex read_write_mutex machen und hoffen, dass boost in Zukunft einen read_write_mutex anbietet.
Anyway, danke für die schnelle Antwort

Gruß,
Chrissi
-
Da kannst du vermutlich lange warten. Der Author der Boost.Thread ist verschollen, bei den alten Email Adressen antwortet keiner mehr - schlecht. Vor allem weil er die Boost.Thread nicht unter der aktuellen Boost Lizenz rausgebracht hat, und daher zumindest Zweifel bestehen ob man an der Boost.Thread rechtens was ändern und die dann wieder unter der Boost Lizenz rausgeben kann. Zumindest tut keiner was an der Boost.Thread.
Es ist stattdessen eine neue Threading Library in planung, aber die wird wohl nicht kompatibel zur alten ausfallen.
r/w locks sind im übrigen meiner Meinung nach sowieso ein Problem, nämlich hast du entweder writer starvation, oder ein wartender writer blockt dir alle neuen reader. Was von beiden machste nu, beides nicht gut.
Am besten man kommt ohne aus. Und nebenbei: r/w locks sind auch so gut wie immer einiges langsamer als "normale" mutexes - die zumindest unter Windows sau-schnell sind.