Rumah >pembangunan bahagian belakang >C++ >Bolehkah Semaphore C 0x Ditiru Menggunakan Mutexes dan Pembolehubah Keadaan?
Bolehkah Anda Menggunakan Semaphore dalam C 0x?
Penyegerakan berasaskan semaphore adalah penting untuk komunikasi benang. Dengan ketiadaan semafor dalam C 0x, ia kelihatan seperti kebuntuan.
Emulasi Semaphore dengan Mutex dan Pembolehubah Keadaan
Nasib baik, semafor boleh dicipta semula menggunakan mutex dan pembolehubah keadaan. Berikut ialah pelaksanaan yang mudah:
#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; } };
Emulasi ini menyediakan gelagat asas semaphore:
Atas ialah kandungan terperinci Bolehkah Semaphore C 0x Ditiru Menggunakan Mutexes dan Pembolehubah Keadaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!