2009-04-14 12 views
0

Est-il possible de détecter un fil suspendu? Ce thread ne fait partie d'aucun pool de threads, c'est juste un thread système. Comme le thread est bloqué, il ne peut traiter aucun événement.Comment détecter un fil bloqué?

Merci,

+0

Quelle plateforme? Je pense que nous avons besoin de plus de détails. – fido

+0

Je sais comment détecter un fil bien monté, mais je ne pense pas que ce soit particulièrement pertinent. – Pesto

+0

Placez un miroir derrière vous et un devant vous. Tenez-vous légèrement sur le côté de ces miroirs afin que vous puissiez voir le reflet du miroir derrière vous sur le miroir en face de vous. Cette configuration vous permettra de regarder votre pull ou vos pantalons et de détecter ce satané fil accroché. Une fois que vous avez trouvé le fil, mais assurez-vous de ne pas tirer dessus! Ce faisant, vous pourriez démêler tout votre pull ou mettre un "run" dans votre pantalon. –

Répondre

3

En théorie, il est impossible. Si vous êtes sous Windows et que vous pensez que le thread risque d'être bloqué, j'imagine que vous pouvez utiliser GetThreadContext plusieurs fois et vérifier si c'est toujours la même chose, mais je ne sais pas à quel point il sera fiable.

+0

+ 1 pour être impossible – rmeador

+0

La solution proposée n'atteindra que très peu des possibilités qu'un fil puisse apparaître "accroché". Il pourrait attraper des deadlocks, mais il n'attrapera pas les livelocks. – erikkallen

1

Pas en théorie, mais en pratique, cela peut être possible, en fonction de votre charge de travail. Par exemple, s'il est supposé répondre à des événements, vous pouvez publier un message de thread (dans Windows) et voir s'il répond. Vous pouvez définir un événement ou un indicateur qui l'amènerait à faire quelque chose - vous devez alors attendre un temps «raisonnable» pour voir s'il a répondu. La question se pose alors de savoir ce que vous feriez avec le fil "accroché", même s'il a vraiment été bloqué et ne tarde pas à répondre. Le thread ne peut généralement pas être tué en toute sécurité et vous ne pouvez généralement pas interrompre un thread arbitraire. Il est suffisamment sûr pour enregistrer un message à l'effet, mais qui s'en souciera? Probablement la meilleure chose à faire est de le noter et de comprendre le bug qui le provoque à se bloquer.

0

En fonction de la charge de travail, du type de traitement effectué et d'autres détails, il peut être possible de détecter un thread bloqué. Dans certains cas, les machines virtuelles modernes peuvent détecter un blocage de verrou où deux threads sont suspendus en attente de l'autre pour libérer un verrou. (Mais ne comptez pas là-dessus, car ce n'est pas toujours possible, seulement parfois.)

Nous avons besoin de beaucoup plus d'informations avant de pouvoir donner une réponse précise à votre question.

Questions connexes