Leser-/Schreibsperren in C: Optimierung für häufige Leser
In C erfordert die Verwaltung des gleichzeitigen Zugriffs auf gemeinsam genutzte Daten effiziente Synchronisierungstechniken. Für Szenarien mit einem vorherrschenden Muster aus häufigen Lesern und seltenen Schreibern bieten Lese-/Schreibsperren eine optimale Lösung.
Standardansatz (C 14 und höher)
Beginnend mit C 14, die Standardbibliothek stellt die Klasse std::shared_mutex zum Implementieren von Lese-/Schreibsperren bereit. Es ermöglicht mehreren Threads, gleichzeitig gemeinsame (schreibgeschützte) Sperren zu erwerben, während der Erwerb exklusiver (Schreib-)Sperren jeweils auf einen einzelnen Thread beschränkt ist. Sie können den folgenden Codeausschnitt verwenden, um eine gemeinsame Sperre einzurichten:
Lock myLock; ReadLock r_lock(myLock); // Acquire a shared (read) lock
Für exklusiven Schreibzugriff verwenden Sie eine eindeutige Sperre:
WriteLock w_lock(myLock); // Acquire an exclusive (write) lock
Boost Library Approach
Wenn Ihre Codebasis einen älteren C-Standard oder Compiler verwendet, können Sie die Implementierung von Lese-/Schreibsperren der Boost-Bibliothek nutzen. Boost stellt die Klasse boost::shared_mutex bereit, die ähnlich wie die Standardbibliotheksversion funktioniert:
Lock myLock; ReadLock r_lock(myLock); // Acquire a shared (read) lock WriteLock w_lock(myLock); // Acquire an exclusive (write) lock
Entsperren
Sobald Sie die Vorgänge abgeschlossen haben, werden Sie von einem Leser/ überwacht. Denken Sie daran, die Schreibsperre aufzuheben, indem Sie unlock() für das Sperrobjekt aufrufen:
r_lock.unlock(); // Release the shared (read) lock w_lock.unlock(); // Release the exclusive (write) lock
Durch die Implementierung von Lese-/Schreibsperren können Sie kann Multithread-Code effektiv für Fälle optimieren, in denen Lesevorgänge die Schreibvorgänge überwiegen, und so einen effizienten gleichzeitigen Zugriff auf gemeinsam genutzte Ressourcen gewährleisten.
Das obige ist der detaillierte Inhalt vonWie können Lese-/Schreibsperren den gleichzeitigen Zugriff in C optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!