J'utilise une API tierce qui nécessite une affinité de thread, c'est-à-dire que l'API tierce renvoie un handle que tout appel d'API tiers ultérieur utilisant ce handle doit exécuter sur le même thread exact. Quelle est la meilleure façon d'implémenter cela dans le C ++ 11 standard (en n'utilisant aucune autre bibliothèque tierce, par exemple boost, etc.)?
Idéalement, j'aimerais pouvoir passer en fermetures du formulaire
[&] { return api_function(_handle, parameters); }
à un fil sur lequel la poignée est créée si possible.
Mon inclination initiale est de créer un std :: thread qui exécute les tâches qui sont ajoutées à une std :: queue. Est-ce la meilleure solution?
tous les appels d'API tiers ultérieurs utilisant ce handle doivent s'exécuter sur le même thread exact
Il ne s'agit pas d' affinité (dans le contexte du traitement) - qui est la liaison d'un thread, ou d'un processus entier, à un processeur / cœur particulier. Ce dont vous avez besoin, c'est de vous assurer qu'aucun autre thread n'exécute vos tâches - quelle que soit l'unité de traitement sur laquelle le thread s'exécute ou s'il continue à s'exécuter sur la même unité ou passe à une autre.
Mon inclination initiale est de créer un std :: thread qui exécute les tâches qui sont ajoutées à une std :: queue. Est-ce la meilleure solution?
Eh bien, cela pourrait certainement fonctionner pour vous. Vous allez pousser les tâches de n'importe quel thread vers, disons a std::queue<std::function<RetValType()>>
(assurez-vous simplement de synchroniser l'accès), et l'appeler pop()
une par une à partir de votre thread singulier qui est autorisé à le faire.
Cela fonctionne conformément à votre demande de pousser ces types d'expressions:
[&] { return api_function(_handle, parameters); }
dans la file d'attente.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots