Heim >Backend-Entwicklung >C++ >Können C 0x-Semaphoren mithilfe von Mutexes und Bedingungsvariablen emuliert werden?
Können Sie Semaphoren in C 0x verwenden?
Semaphorbasierte Synchronisierung ist für die Thread-Kommunikation unerlässlich. Ohne Semaphore in C 0x scheint es sich um einen Deadlock zu handeln.
Semaphor-Emulation mit Mutex und Bedingungsvariablen
Glücklicherweise kann ein Semaphor mithilfe eines Mutex neu erstellt werden und eine Bedingungsvariable. Hier ist eine einfache Implementierung:
#include <mutex> #include <condition_variable> class semaphore { std::mutex mutex_; std::condition_variable condition_; unsigned long count_ = 0; // Initialized as locked. public: void release() { std::lock_guard<decltype(mutex_)> lock(mutex_); ++count_; condition_.notify_one(); } void acquire() { std::unique_lock<decltype(mutex_)> lock(mutex_); while(!count_) // Handle spurious wake-ups. condition_.wait(lock); --count_; } bool try_acquire() { std::lock_guard<decltype(mutex_)> lock(mutex_); if(count_) { --count_; return true; } return false; } };
Diese Emulation stellt das grundlegende Verhalten von Semaphoren bereit:
Das obige ist der detaillierte Inhalt vonKönnen C 0x-Semaphoren mithilfe von Mutexes und Bedingungsvariablen emuliert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!