Maison  >  Article  >  développement back-end  >  Comment créer un pool de threads à l'aide de Boost en C ?

Comment créer un pool de threads à l'aide de Boost en C ?

DDD
DDDoriginal
2024-11-25 18:15:13561parcourir

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

Création d'un pool de threads avec Boost en C

En C, la création d'un pool de threads à l'aide de la bibliothèque Boost nécessite un processus simple.

Tout d'abord, instanciez un asio::io_service et un thread_group. Ensuite, remplissez le thread_group avec les threads connectés au io_service. Des tâches peuvent ensuite être assignées aux threads à l'aide de la fonction boost::bind.

Pour arrêter les threads, arrêtez simplement le io_service et combinez-les tous.

Les fichiers d'en-tête nécessaires sont :

#include <boost/asio/io_service.hpp>
#include <boost/bind.hpp>
#include <boost/thread/thread.hpp>

Un exemple de mise en œuvre est fourni ci-dessous :

// 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();

(Source : Recettes < Asio)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn