Bonjour,
Je voudrais endormir un thread , verifier dans le thread principal s'il ce thread et endormis ou non et le reveiller si oui . Est-ce possible?
merci d'avance.
Bonjour,
Je voudrais endormir un thread , verifier dans le thread principal s'il ce thread et endormis ou non et le reveiller si oui . Est-ce possible?
merci d'avance.
Bonsoir,
Sous Linux il n'y a pas de primitive pthread_xxx permettant de geler un thread, et c'est tant mieux, en effet on ne bloque pas un thread de l'extérieur alors qu'on ne sait pas où il en est dans son exécution.
Cela veut dire que vous devrez prévoir ce gel dans le code exécuté par le thread à bloquer, cela peut se faire via un mutex et un int ou une condition et un int. L'int permet à la fois au thread de savoir s'il doit se bloquer et au thread bloquant de savoir si le thread c'est bloqué, le mutex ou la condition permettent de bloquer puis débloquer le thread.
Par exemple l'int vaut 0 lorsque le thread1 ne doit pas se bloquer et n'est pas bloqué, et le mutex n'est prit par personne. Lorsque le thread2 veut bloquer le thread1 il prend le mutex et passe l'int à 1. Lorsque le thread1 voir l'int à 1 (test explicite dans son code à differents endroits) il passe l'int à 2 et essaye de prendre le mutex ce qu'il ne peut pas faire et donc se bloque. Lorsque le thread2 veut débloquer le thread1 il relache le mutex, le thread1 peut redemarrer, il prend le mutex, le relache immédiatement et passe l'int à 0. Le fait que l'int est à 2 indique que le thread est bloqué.
Il faut voir le besoin, mais les conditions variables ont la propriété agréable que notifier sur une condition variable ne fait rien si personne n'était endormi dessus.
Tu peux donc, si cela est applicable, te contenter de notifier la condition variable sans vérifier que le thread est endormi (attention par contre : si le thread s'endort juste derrière, il ne sera pas réveillé par la notification précédente, l'évènement est perdu, il faut donc bien vérifier tes enchaînements pour voir si tu ne risques pas d'arriver à un état de blocage).
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager