Pthread - Quelle est la différence entre time.h :: sleep () et pthread.h :: pthread_yield ()?
J'ai passé un bon long moment pour trouver des infos sur les différences entre les temps.h::sleep() et pthread.h::pthread_yield (), mais a été incapable de trouver un matériau de référence, et donc, je suis à l'affichage de cette question.
Quelle est la différence entre le temps.h::sleep() et pthread.h::pthread_yield()?
Mise à jour:
La raison que je demande, c'est parce que j'ai été en utilisant le sommeil (de) dormir() chaque thread... et ma demande a commencé à avoir des problèmes quand il y en a 8 threads vs 4 threads. Quand je suis allé en ligne pour voir si le sommeil() n'affecte que chaque thread, je ne pouvais pas trouver une bonne référence en indiquant que Sleep() affecte l'ensemble du processus OU sleep() n'affecte que le thread individuel.
source d'informationauteur Trevor Boyd Smith
Vous devez vous connecter pour publier un commentaire.
De pthread_yield:
De la sommeil man:
Si vous ne voulez pas d'avoir un vrai temps de retard à votre fils et vous voulez juste de permettre à d'autres threads pour faire leur travail, alors pthread_yield est mieux que le sommeil.
sleep() les causes de votre programme pour arrêter l'exécution pendant un certain laps de temps. N'importe quoi d'autre qui se passe sur le système, votre fil ne reprendront pas avant au moins la longueur de temps passé à dormir() est écoulé. pthread_yield() informe le système d'exploitation que votre fil est fini de travailler, et qu'il peut passer de l'exécution à un autre thread. Cependant, si il n'y a pas de thread de priorité supérieure qui doit faire le travail à ce moment, votre thread peut démarrer immédiatement.
IOWs, après le sommeil() de votre fil est garanti pour arrêter l'exécution, même si personne d'autre a besoin de courir, alors que pthread_yield() est juste une façon polie de donner à d'autres threads une chance de s'exécuter si ils en ont besoin.
Mise à jour en réponse à la question de mise à jour: les deux sleep() et pthread_yield() n'affectent que le thread appelant.
sommeil(s) prend le thread en cours d'exécution, et en suspend jusqu'à s secondes (ou il est réveillé par un signal.)
Plus concrètement, lorsque vous appelez la fonction sleep(), le thread va cesser d'exécution et juste... attendre jusqu'à ce que le temps spécifié s'est écoulé. Une fois qu'il passe, ce thread est placé dans la file d'attente prêt.
pthread_yield() dit "prends ce fil de discussion, et de le mettre dans la file d'attente prêt." Votre fil d'arrêt d'exécution et être dans l'attente de l'état de la sélection ou l'exécution par le planificateur. Cela ne permet pas de garantir que votre fils ne sera pas immédiatement reprendre l'exécution. Mais il donne un autre thread une chance de s'exécuter à un moment donné dans son exécution.
Je vais aller sur une branche et dire que le sommeil(0) permettrait de réaliser la même chose qu'un pthread_yield() - l'arrêt de l'exécution et de placer le fil dans la file d'attente prêt.