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

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

DDD
DDDオリジナル
2024-11-25 18:15:13587ブラウズ

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。