你能在 C 0x 中使用信號量嗎?
基於信號量的同步對於執行緒通訊至關重要。在 C 0x 中沒有信號量的情況下,這似乎是一個死鎖。
使用互斥體和條件變數進行信號量模擬
幸運的是,可以使用互斥體重新建立訊號量和一個條件變數。這是一個簡單的實作:
#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; } };
此模擬提供了訊號量的基本行為:
以上是可以使用互斥體和條件變數來模擬 C 0x 訊號量嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!