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 中国語 Web サイトの他の関連記事を参照してください。