thread en attente jusqu'à ce qu'une condition a été produite
Je veux attendre un thread 2 thread exécuté simultanément simulateur jusqu'à ce qu'une condition a été produite, peut-être la maladie est survenue après 1000 cycles ou plus de l'exécution d'un programme dans le simulateur, après que la condition s'est produite à la attendu thread exécuté à nouveau, comment puis-je le faire?
- Recherche des variables conditionnelles et les sémaphores.
- Aussi avoir un regard sur des promesses et des contrats à terme (en.cppreference.com/w/cpp/thread/promise)
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin des variables conditionnelles.
Si votre compilateur prend en charge
std::conditional
introduit par le C++11, alors vous pouvez le voir pour les détails:Si votre compilateur ne le supporte pas, et vous travaillez avec les threads win32, puis de voir ce:
Et ici est un exemple complet.
Et si vous travaillez avec des threads POSIX, alors voir ceci:
Vous pouvez voir ma mise en œuvre de
conditional_variable
utilisant win32 primitives ici:Faites défiler vers le bas et de voir la mise en oeuvre d'abord, puis de voir l'utilisation de la concurrente de la file d'attente de mise en œuvre.
Une utilisation typique de la variable de condition est: est-ce
où
CheckCondition
est une fonction (ou un foncteur) qui vérifie la condition. Il est appelé parwait()
fonctionnent à l'intérieur quand il faussement se réveille et si la condition n'a pas encore rencontré lewait()
fonction dort encore. Avant d'aller dormir,wait()
libère le mutex, atomiquement.Si vous n'avez pas de C++11, mais que vous avez un système qui prend en charge les threads POSIX, alors vous pouvez utiliser une variable de condition. Il ya d'autres choix, mais une variable de condition peut être le plus simple compte tenu de la façon dont vous avez décrit votre problème.
Une variable de condition pthread est utilisé en conjonction avec un mutex. Le truc avec la variable de condition est que l'attente sur elle provoque de l'acquis mutex pour être libéré, jusqu'à ce que l'attente retours d'appel, à quel point le mutex a été acquis de nouveau. La séquence est:
Le signal étape est utilisée dans le cas de plusieurs threads de la saisie de la même section critique ci-dessus.
Si un autre thread peut accéder à la même mutex pour modifier l'état qui affecte le PRÉDICAT, ce thread devriez vérifier pour voir si quelqu'un a besoin pour être signalé.
Les commandes POSIX d'intérêt sont:
À l'aide de Sémaphores pour la signalisation. Exemple (demande de nettoyage de sortie) comme ci-dessous:
Déclarer dans l'en-tête
Dans la source (thread principal);
Dans la source, (générés-fil);
Maintenant, dès que vous le signal sur le sémaphore à l'aide de "sem_post". Le thread va recevoir le signal à l'attente node/point, et va continuer, il y suite.
essayer quelque chose comme cela :
//so afinde attendre alors appeler le WaitForEvent méthode
//c'est comment un événement peut être signalé: