2016-08-26 2 views
1

Existe-t-il un moyen de suspendre temporairement et de reprendre un groupe entier de threads, sans utiliser de variables de condition ou d'autres primitives de synchronisation dans les threads?Suspendre et reprendre des threads

pthread_kill affecte le processus entier, il ne peut donc pas être utilisé pour suspendre des threads, mais y a-t-il un appel système de bas niveau pour Linux/Windows/Darwin?

La raison est qu'il doit y avoir un module de diagnostic qui s'exécute lui-même sur un thread différent. Il devrait geler périodiquement un programme multi-thread complet, puis lire certaines variables (atomiques) des autres threads.

+0

Dans Windows, le débogueur de Visual Studio peut faire une pause tout, mais il s'exécute à partir d'un processus distinct, et probablement en utilisant DebugBreakProcess(). Je ne suis pas sûr comment il localise les variables du processus en cours de débogage. – rcgldr

Répondre

1

Ce serait presque impossible de faire du travail. Dès que le module de diagnostic a tenté d'acquérir un verrou qu'un autre thread tenait en main, le processus se bloquait. Et, en général, vous n'avez aucun moyen de savoir quelles opérations pourraient tenter en interne d'acquérir des verrous que d'autres threads pourraient contenir. Quel que soit le problème que vous essayez de résoudre, il y a certainement une meilleure façon de le résoudre.