Ich versuche, den folgenden Code in einem Multi-Threading-Szenario zu implementieren:Multiple-Leser, single-Schreiber-Sperren in Boost-
Get shared access to mutex
Read data structure
If necessary:
Get exclusive access to mutex
Update data structure
Release exclusive lock
Release shared lock
Boost-Threads haben eine shared_mutex
Klasse, die für einen Mehr Leser entworfen wurde, Single - Schreibmaschinenmodell. Es gibt mehrere Stackoverflow-Fragen bezüglich dieser Klasse. Jedoch bin ich nicht sicher, ob es das obige Szenario passt, wo irgendein Leser ein Verfasser werden kann. In der Dokumentation:
Das UpgradeLockable Konzept ist eine Verfeinerung des SharedLockable Konzept, das für aktualisierbar Eigentum sowie Miteigentum und exklusiven Besitz erlaubt. Dies ist eine Erweiterung des Multiple-Leser/ Single-Schreib Modell von dem SharedLockable Konzept zur Verfügung gestellt: ein Einzel Fäden aktualisierbar Eigentum zur gleichen Zeit haben können als andere Eigentum freigegeben hat.
Von dem Wort "single" vermute ich, dass nur ein Thread eine aktualisierbare Sperre enthalten kann. Die anderen halten nur eine gemeinsame Sperre, die nicht zu einer exklusiven Sperre aktualisiert werden kann.
Wissen Sie, ob boost::shared_lock
in dieser Situation nützlich ist (jeder Leser kann ein Schreiber werden) oder ob es andere Möglichkeiten gibt, dies zu erreichen?
Was ist Ihre Definition "exklusiver Zugang", wenn es nicht "nur ein Thread kann das Schloss zu einer Zeit halten"? Oder verwirren Sie "einen Thread zu einem Zeitpunkt" mit "einem bestimmten Thread, der im Voraus ausgewählt wurde"? –
@Pete: Ich will einen Thread (* nicht * im Voraus gewählt), um die exklusive Sperre zu halten. – Amnon