Je cherche un moyen de redémarrer un thread, que ce soit dans le contexte de ce thread ou à l'extérieur du thread, éventuellement à partir d'un autre processus. (Toutes ces options fonctionneront.) Je suis conscient de la difficulté d'hiberner des processus entiers, et je suis à peu près sûr que ces mêmes difficultés concernent les threads. Cependant, je demande de toute façon dans l'espoir que quelqu'un a un aperçu. Mon but est de mettre en pause, enregistrer dans un fichier, et redémarrer un thread en cours d'exécution de son contexte exact sans modification du code de ce thread, ou plutôt, la modification dans une petite zone - je ne peux pas écrire la sérialisation fonctions dans tout le code. Le bloc de code principal doit être non modifié et ne comportera pas de poignées globales/système (handles de fichiers, sockets, mutex, etc.). Il n'est pas nécessaire d'enregistrer des détails vraiment bas et sales comme des registres de CPU; mais fondamentalement, le tas, la pile et le compteur de programme doivent être sauvegardés, et tout ce qui est nécessaire pour que le thread fonctionne à nouveau logiquement correctement à partir de son point de sauvegarde. L'état résultant du programme ne devrait pas être différent, s'il a été enregistré ou non.Hibernation/redémarrage d'un thread
Ceci est pour un programme de débogage pour un logiciel à haute fiabilité; le but est d'exécuter des simulations du logiciel avec différents scripts pour la saisie, et de pouvoir mettre en pause une simulation en cours puis de la redémarrer plus tard - ou d'amener la simulation à un point de branchement, de l'enregistrer, de faire des copies simulations à partir du point de départ commun. C'est pourquoi le programme principal ne peut pas être modifié.
Le langage de threads principal est en C++, et devrait fonctionner sur Windows et Linux, mais s'il y a un moyen de le faire uniquement sur un système, alors c'est aussi acceptable.
Merci d'avance.
pense que sauvegarder le compteur de programme sans enregistrer les registres du CPU est suffisant pour restaurer l'état du programme en cours? Bien sûr, si le thread n'est pas en cours d'exécution, les valeurs du registre CPU, y compris les PC, seront en pratique quelque part sur la pile, ou peut-être dans une structure de données OS, selon la plate-forme. –
Eh bien, la mémoire doit évidemment être sauvegardée, mais du point de vue de la correction logique, que ce soit dans les registres, le cache, la mémoire ou le paginé, cela n'a pas d'importance. Évidemment, toutes les valeurs contenues dans les registres doivent être sauvegardées, car elles constituent l'état du programme, mais le fait qu'elles existent dans les registres (plutôt que dans le cache, la mémoire ou le disque dur) n'a pas d'importance. –