-
C++, Glib, Threads, main
Bonjour,
J'ai une question idiote. Dans un programme, je lance 2 threads avec la méthodeGlib::Thread::create. Puis mon programme lance l'interface graphique et fait sa vie.
Lorsque que le programme se termine (que l'on quitte le main), est-ce que mes 2 threads sont également tués ? Ou bien sont-ils complètement indépendants, et dois-je les tuer moi-même ?
Merci :)
-
Bonjour,
Tu dois les tuer toi-meme pour etre propre.
En effet, lorsque tu tues ton programme, tout l'espace commun aux threads est detruit, mais eux non. Tu crees des threads zombies, qui peuvent etre collectes par le systeme (et donc tue) ou non, selon ton systeme.
-
ok, merci, je vais faire ça plus propre alors :)
Si je comprends bien, la différence avec un spawn, c'est que les threads et le programme qui les a lancé ont un espace mémoire commun, et appartiennent au même groupe de processus. C'est dommage qu'ils ne soient pas tués, ça aurait été logique non ?
-
C'est une question de plate-forme.
- Sous un Linux moderne, les threads sont plus ou moins des processus partageant leur mémoire, d'où la possibilité de zombification.
- Sous Windows, les threads sont des composants d'un processus. Tous les threads sont tués lors d'un appel à ExitProcess(), et le retour du main() provoque un tel appel. Si l'on contourne cela, le processus se termine quand son dernier thread se termine. Ce qui est bien sur le papier, mais pose problème quand des bibliothèques créent des threads hors de ton contrôle, d'où la nécessité du ExitProcess().
-
hm je vois.... c'est intéressant tout ça :)
Merci :)