ホームページ > バックエンド開発 > C++ > C で Boost を使用してスレッド プールを作成するにはどうすればよいですか?

C で Boost を使用してスレッド プールを作成するにはどうすればよいですか?

DDD
リリース: 2024-11-25 18:15:13
オリジナル
622 人が閲覧しました

How do I create a thread pool using Boost in C  ?

C での Boost を使用したスレッド プールの作成

C では、Boost ライブラリを使用してスレッド プールを作成するのは簡単なプロセスが必要です。

まず、 asio::io_service と thread_group をインスタンス化します。次に、io_service に接続されているスレッドを thread_group に追加します。その後、boost::bind 関数を利用してタスクをスレッドに割り当てることができます。

スレッドを停止するには、単純に io_service を中止し、すべてのスレッドを結合します。

必要なヘッダー ファイルは次のとおりです。

#include <boost/asio/io_service.hpp>
#include <boost/bind.hpp>
#include <boost/thread/thread.hpp>
ログイン後にコピー

実装例を以下に示します:

// Establish an io_service and a thread_group (essentially a pool)
boost::asio::io_service ioService;
boost::thread_group threadpool;

// Commence ioService processing loop
boost::asio::io_service::work work(ioService);

// Add threads to pool (e.g., two in this case)
threadpool.create_thread(
    boost::bind(&boost::asio::io_service::run, &ioService)
);
threadpool.create_thread(
    boost::bind(&boost::asio::io_service::run, &ioService)
);

// Assign tasks to thread pool via ioService.post()
// Refer to "http://www.boost.org/doc/libs/1_54_0/libs/bind/bind.html#with_functions" for details on boost::bind
ioService.post(boost::bind(myTask, "Hello World!"));
ioService.post(boost::bind(clearCache, "./cache"));
ioService.post(boost::bind(getSocialUpdates, "twitter,gmail,facebook,tumblr,reddit"));

// Halt ioService processing loop (no new tasks will execute after this point)
ioService.stop();

// Wait and combine threads in thread pool
threadpool.join_all();
ログイン後にコピー

(出典:レシピ

以上がC で Boost を使用してスレッド プールを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート