Comment implémenter l'affinité de thread en C ++

markf78

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?

Type

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.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Dans Kubernetes, comment implémenter l'affinité de session à l'aide d'une entrée?

Comment implémenter l'arborescence minimale en C ++ avec plus de 2000 nœuds?

Comment implémenter l'algorithme d'expansion de Laplace en c?

Comment implémenter au mieux l'idiome "newtype" en C ++?

Comment implémenter l'exemple de Dead Lock en Java

Comment implémenter JavaCameraView en haut de l'écran

Comment implémenter des «connexions» à l'aide de fonctions C ++

Comment implémenter un conteneur de type SQL en C ++

Comment implémenter le flou de boîte en c?

Comment implémenter la fonctionnalité de base en C

Comment implémenter le constructeur de copie en C++

Essayer d'implémenter l'algorithme de Luhn en C

Comment implémenter des pointeurs de fonction de style C ++ en C # ?, Sans utiliser de délégués

Définir l'affinité de thread sur deux cœurs à l'aide d'OpenMP

Comment utiliser l'affinité de pod

Comment utiliser l'affinité de pod

Affinité de thread Java

Affinité de thread vs affinité de processus

Comment implémenter l'infini en Java?

Comment implémenter l'accessibilité en Java

C # exécuter le rappel Threading.ThreadPool.QueueUserWorkItem dans l'affinité de thread principal

Comment implémenter un calcul parallèle simple sur différents cœurs à l'aide de MPI en Python

Comment pouvons-nous implémenter un thread de concurrence à l'aide du protocole dans swift ?

Ada - Comment implémenter une tâche asynchrone qui permet au thread principal de l'interroger?

Définition de l'affinité de thread de std :: threads

Comment implémenter correctement strcpy en c?

Comment implémenter INotifyPropertyChanged en C # 6.0?

Comment implémenter une macro en C

Comment implémenter stdarg en C

TOP liste

  1. 1

    Microsoft.WebApplication.targets

  2. 2

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  3. 3

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  4. 4

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  5. 5

    Passer la taille d'un tableau 2D à une fonction ?

  6. 6

    Exporter la table de l'arborescence vers CSV avec mise en forme

  7. 7

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  8. 8

    Créer un système Buzzer à l'aide de python

  9. 9

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  10. 10

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  11. 11

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  12. 12

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  13. 13

    Conversion double en BigDecimal en Java

  14. 14

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  15. 15

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  16. 16

    Comment vérifier si un utilisateur spécifique a un rôle? Discord js

  17. 17

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  18. 18

    Existe-t-il un moyen de voir si mon bot est hors ligne ?

  19. 19

    comment afficher un bouton au-dessus d'un autre élément ?

  20. 20

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  21. 21

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

chaudétiquette

Archive