マルチスレッド プログラミングの領域では、共有リソースへのアクセスを調整し、プログラム実行の整合性を確保するために同期メカニズムが不可欠です。セマフォは、この目的のための一般的なツールであり、スレッドが特定の条件に基づいて待機したり、互いに信号を送り合ったりできるようにします。
しかし、C 0x の出現により、セマフォは廃止されるのではないかと推測されています。これは本当ですか? もしそうなら、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; } };
このクラスは、セマフォ。 release() メソッドはセマフォのロックを解除し、リソースが使用可能になったことを通知します。 acquire() メソッドは、リソースが使用可能になるまで待機し、その後セマフォをロックします。 try_acquire() メソッドは、待機せずにセマフォのロックを試行し、成功または失敗を示すブール値を返します。
このソリューションは、条件変数を利用して待機メカニズムと通知メカニズムを処理し、セマフォ機能に対する柔軟で拡張可能なアプローチを提供します。
以上がC 0x にはセマフォがありませんか? スレッド同期の代替手段は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。