Maison >développement back-end >C++ >Comment puis-je créer et utiliser un pool de threads avec Boost en C ?

Comment puis-je créer et utiliser un pool de threads avec Boost en C ?

DDD
DDDoriginal
2024-11-16 07:21:02479parcourir

How Can I Create and Use a Thread Pool with Boost in C  ?

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

Pour établir un pool de threads à l'aide de Boost en C, respectez ces étapes :

  1. Initialisez un io_service et un thread_group :
boost::asio::io_service ioService;
boost::thread_group threadpool;
  1. Remplissez thread_group avec les threads associés à io_service :
threadpool.create_thread(
    boost::bind(&boost::asio::io_service::run, &ioService)
);
  1. Attribuez des tâches aux threads à l'aide de boost::bind:
ioService.post(boost::bind(myTask, "Hello World!"));

Pour arrêter les threads (généralement lors du programme résiliation) :

  1. Arrêtez le io_service :
ioService.stop();
  1. Rejoignez toutes les discussions :
threadpool.join_all();

Exemple de code :

// Create io_service and thread_group
boost::asio::io_service ioService;
boost::thread_group threadpool;

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

// Add threads to the thread pool
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 the thread pool
ioService.post(boost::bind(myTask, "Hello World!"));
ioService.post(boost::bind(clearCache, "./cache"));
ioService.post(boost::bind(getSocialUpdates, "twitter,gmail,facebook,tumblr,reddit"));

// Stop the ioService processing loop
ioService.stop();

// Join all threads in the thread pool
threadpool.join_all();

En résumé, Boost fournit un mécanisme simple pour créer des pools de threads et leur attribuer des tâches, permettant une exécution simultanée en C candidatures.

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