empêcher le thread Linux d'être interrompu par le planificateur
Comment pouvez-vous dire que le planificateur de threads sous linux pour ne pas interrompre votre discussion pour n'importe quelle raison? Je suis de programmation en mode utilisateur. Est-ce tout simplement de verrouiller un mutex-vis de cela? Je veux éviter que d'autres threads dans mon processus d'être prévue lorsqu'une fonction est en cours d'exécution. Ils pourraient bloquer et je serait gaspiller des cycles de processeur avec des changements de contexte. Je veux tout thread exécutant la fonction pour être en mesure de terminer l'exécution sans interruption, même si le fils timeslice est dépassé.
source d'informationauteur johnnycrash
Vous devez vous connecter pour publier un commentaire.
Ne peut pas vraiment être fait, vous avez besoin d'un système en temps réel. La ferme chose que vous obtiendrez avec linux est d'
définir la politique d'ordonnancement en temps réel à un planificateur de tâches, par exemple SCHED_FIFO, et aussi de mettre le PTHREAD_EXPLICIT_SCHED attribut. Voir, par exemple,ici , même maintenant, si, par exemple, irq des gestionnaires et d'autres trucs va interrompre votre fil et de les exécuter.
Toutefois, si vous ne se soucient que les threads dans votre propre processus de ne pas être en mesure de faire quelque chose, alors oui, avoir bloquer sur un mutex votre thread en cours d'exécution est suffisante.
La partie la plus difficile est de coordonner tous les autres threads pour attraper un mutex à chaque fois que votre fils doit faire sa chose.
Vous devriez l'architecte de votre sw de sorte que vous êtes pas dépend de l'planificateur de faire la "bonne" chose à partir de votre application, du point de vue. Le planificateur est compliqué. Il fera ce qu'il pense être le mieux.
Les changements de contexte sont à bas prix. Vous dites
mais il ne faut pas la regarder de cette façon. Utiliser le multi-thread machines de mutex et bloqué /processus en attente. Les machines sont là pour vous d'utiliser...
Vous ne pouvez pas. Si vous pouviez ce qui pourrait les empêcher votre fils de ne jamais relâcher la demande et de la faim d'autres threads.
Le meilleur que vous pouvez faire est de mettre à votre threads de priorité, de sorte que le planificateur sera le préfère sur la baisse de threads de priorité.
Pourquoi ne pas tout simplement laisser le thread concurrent à bloc, puis le planificateur n'auront plus rien à programmer, mais votre fil de vie? Pourquoi compliquer la conception de deuxième deviner le planificateur?
Regarder en ordonnancement temps réel sous Linux. Je ne l'ai jamais fait, mais si vous avez BESOIN de ce de ce est aussi proche que vous pouvez obtenir à l'utilisateur le code de l'application.
Ce que vous semblez en avoir peur n'est pas vraiment que les grandes d'un accord. Vous ne pouvez pas arrêter le noyau d'interrompre vos programmes pour de vrai interruptions ou d'une tâche plus urgente envie de courir, mais avec la tenue régulière le noyau n'utilise ses propres calculé la valeur de la priorité que joli beaucoup gère la plupart de ce que vous êtes inquiet au sujet de. Si Un thread est tenue de ressources X exclusivement (X pourrait être un cadenas) et le fil B est en attente sur des ressources X pour devenir disponible puis Un effectif de priorité sera au moins aussi élevée que B est la priorité. Il prend également en compte si un processus utilise beaucoup de cpu ou si elle est le fait de passer beaucoup de temps à dormir, pour calculer la priorité. Bien sûr, la valeur de nice va là-bas aussi.