2011-05-18 2 views
0

Je dois détecter si un thread donné est actuellement programmé dans une CPU ou non. Je suis sur un système Linux avec pthreads. Dites que mon code fonctionne sur un gestionnaire de signal et je sais qu'il y a des threads X et Y dans mon application, et à partir de mon gestionnaire de signal, je veux vérifier si X et Y sont actuellement programmés ou non.Détection de threads planifiés sur Linux

Merci pour votre aide.

+0

qu'essayez-vous de faire? vérifier qu'un thread est 'en cours d'exécution' ou même 'runnable' vous donne des informations qui sont périmées _really_ fast. – Mat

+0

Ce que j'essaie de faire est expliqué dans la question. –

Répondre

3

En général, si vous devez poser cette question, vous pensez probablement incorrectement. Quelle que soit la réponse que vous obtiendrez, elle sera immédiatement dépassée et tout ce que vous envisagez de faire à propos de la réponse sera soumis à des conditions de course massives.

Cependant, en théorie, vous pouvez regarder/proc/getpid()/tâche/threadid/status et savoir si un thread particulier est en cours d'exécution ou non. Notez qu'il s'agit d'une chose très linux et que toute correspondance entre le code de retour "threadid" et pthread_self() ou la copie pthread_t de pthread_create n'est pas du tout un standard.

+0

Merci, en fait, je viens juste de rapporter que/proc a ce que je veux, tu m'as battu dessus. Cependant, je n'apprécie pas votre "pensée incorrecte" commentaire. Je travaille sur un système qui n'est pas seulement linux-only, mais qui est seulement supposé fonctionner sur une distribution particulière. Je ne me soucie pas non plus des conditions de course (c'est une chose statistique que je veux faire) –

+0

@bugur: Vous devriez jeter un oeil à l'outil 'perf sched' - c'est un bon moyen d'analyser le comportement de la programmation des threads. – caf

+0

@caf: merci, c'est intéressant. J'ai un cas d'utilisation plus spécial. Je suis suivi un certain nombre de threads et essaye de comprendre combien de temps ils passent à chaque «étape» de leur traitement. Chaque thread suit son niveau actuel. Les transferts entre les étapes peuvent se produire très rapidement, ou très lentement en raison du blocage des chemins de code. En ce moment, j'ai le moyen de déterminer combien de temps chaque bande de roulement passe à chaque étape. Le problème est que je ne peux pas faire la différence entre le blocage et le travail réel. –

Questions connexes