C 11 のスレッド プーリング
はじめに
スレッド プーリングは、C 11 を管理するための手法です。タスクを動的に割り当てることができるスレッドのセット。タスクごとにスレッドを作成および破棄する場合に比べて、パフォーマンスやリソース効率の向上など、いくつかの利点があります。
スレッド プーリングについて
C 11 では、スレッド プールは通常、スレッド、ミューテックス、条件変数の組み合わせを使用して実装されます。スレッドがバックグラウンドで作成および開始され、タスクがキューに追加されます。ワーカーは常にキューを監視し、新しいタスクが利用可能になるのを待ちます。タスクが利用可能になると、ワーカーはそれを取得して実行します。
スレッド プールの作成
スレッド プールを作成するには、ThreadPool クラスを定義します。
class ThreadPool { public: void Start(); void QueueJob(const std::function<void()>& job); void Stop(); bool busy(); private: void ThreadLoop(); bool should_terminate = false; std::mutex queue_mutex; std::condition_variable mutex_condition; std::vector<std::thread> threads; std::queue<std::function<void()>> jobs; };
スレッドの管理Pool
ワーカー スレッド ループ
各ワーカー スレッドは、タスクを待機して実行するための無限ループを実行します:
void ThreadPool::ThreadLoop() { while (true) { std::function<void()> job; { std::unique_lock<std::mutex> lock(queue_mutex); mutex_condition.wait(lock, [this] { return !jobs.empty() || should_terminate; }); if (should_terminate) { return; } job = jobs.front(); jobs.pop(); } job(); } }
スレッドプールの使用
スレッドを使用するには
ThreadPool thread_pool; thread_pool.Start(); thread_pool.QueueJob([] { /* ... */ });
スレッド プーリングの利点
以上がC 11 ではスレッド プーリングはどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。