你能在 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中文网其他相关文章!