9
votes

Puis-je utiliser Boost :: Threadpool comme une «file d'attente de fil-coffre»?

Ce dont j'ai besoin est en fait une structure de file d'attente de fil-sécurité, où plusieurs clients conservent les données de dumping dans la file d'attente et un thread de travail continue de traiter et de faire apparaître la file d'attente

Y a-t-il une solution bien établie existante dans STL ou Boost?

Je pense maintenant à utiliser Boost :: Threadpool pour faire cela. Il suffit de définir simplement le nombre de threads parallèles pour être 1, le paramètre d'entrée de la fonction de tâche est modifié chaque fois que New Message arrive à partir d'un client. Cela a-t-il de sens, existe-t-il une limitation que je n'ai pas encore anticipé ici?


0 commentaires

3 Réponses :


12
votes

In boost Il y a un Classe de la file d'attente de message , c'est ce dont vous avez besoin: une file d'attente de fil-sécurité.

Les files d'attente de message sont un concept largement utilisé pour la communication interprocessée. Une file d'attente de message est la file d'attente de thread-Safe, quelle caractéristique de clé est qu'elle bloque en lecture de la file d'attente vide et attend que les données apparaissent. Dans cette classe de boost, des attentes chronométrées sont également soutenues et bloquent l'écrivain si la file d'attente est pleine.


1 commentaires

FYI, la file d'attente de message nécessite que les données soient séralisables binaires ref . Donc, l'utiliser dans le processus n'est pas le moyen le plus pratique. Il suffit d'ajouter plus d'informations, pas contre la réponse



9
votes

Si vous avez besoin d'un tel cadre dans une application de processus unique, Boost :: Asio :: io_service devrait être suffisant. Voici une boîte d'échantillon de boîte de travail utilisant Boost :: thread and boost :: Asio :: io_service. XXX

Utilisation: - Implémentez l'interface IworkerThreadjob. Appelez la méthode ProcessJob à partir de plusieurs clients.

ici boost :: Asio :: io_service agit comme une file d'attente de sécurité de fil.


0 commentaires

2
votes

Si vous êtes sous Windows, vous pouvez utiliser Concurrent_Queue dans Ppl.h (Nouveau pour VS2010). Si vous n'êtes pas sous Windows, vous pouvez utiliser Concurrent_Queue.h dans les blocs de construction de fil d'Intel.

Anthony Williams a également une file d'attente basée sur la variable de condition sur son blog qui est bon.


0 commentaires