Les personnes familiarisées avec la programmation WIN32 doivent savoir que la méthode de gestion des processus de WIN32 est très différente de celle de Linux. Sous UNIX, il n'y a que la notion de processus, mais dans WIN32 il y a aussi la notion de "thread", donc Linux. et WIN32 sont ici Quelle est la différence ?
Le processus/thread dans WIN32 est hérité d'OS/2. Dans WIN32, « processus » fait référence à un programme et « thread » est un « indice » d'exécution dans un « processus ». D'un point de vue fondamental, le multi-processus de WIN32 n'est pas très différent de celui de Linux. Le thread de WIN32 est équivalent au processus Linux et est un véritable code d'exécution. Cependant, dans WIN32, les segments de données sont partagés entre les threads du même processus. C'est la plus grande différence avec le processus Linux.
Le programme suivant montre comment le prochain processus de WIN32 démarre un thread.
entier g; DWORD WINAPI ChildProcess (LPVOID lpParameter) { int je; pour ( je = 1; je <1000; je ++) { g++; printf( "Ceci est le fil de discussion enfant : %dn", g ); } Fil de sortie( 0 ); } ; vide principal() { int ID de fil ; int je; g = 0 ; CreateThread( NULL, 0, ChildProcess, NULL, 0, &threadID ); pour ( je = 1; je <1000; je ++) { g++; printf( "Ceci est le fil parent : %dn", g ); } }
Sous WIN32, la fonction CreateThread est utilisée pour créer un thread. Contrairement à la création d'un processus sous Linux, le thread WIN32 ne démarre pas à partir du point de création. Au lieu de cela, CreateThread spécifie une fonction et le thread commence à s'exécuter à partir de cette fonction. Ce programme est le même que le programme UNIX précédent, avec deux threads imprimant chacun 1 000 informations. threadID est le numéro de thread du thread enfant. De plus, la variable globale g est partagée par le thread enfant et le thread parent. C'est la plus grande différence avec Linux. Comme vous pouvez le voir, le processus/thread de WIN32 est plus compliqué que celui de Linux. Il n'est pas difficile d'implémenter un thread similaire à WIN32 sous Linux tant qu'après le fork, le processus enfant appelle la fonction ThreadProc et ouvre un thread partagé. zone de données pour les variables globales. Cependant, il est impossible d'implémenter des fonctions similaires à fork sous WIN32. Par conséquent, bien que les fonctions de bibliothèque fournies par le compilateur du langage C sous WIN32 soient déjà compatibles avec la plupart des fonctions de bibliothèque Linux/UNIX, fork ne peut toujours pas être implémenté.
Pour les systèmes multitâches, le partage de zones de données est nécessaire, mais c'est aussi un problème qui peut facilement prêter à confusion. Sous WIN32, un programmeur peut facilement oublier que les données entre les threads sont partagées après qu'un thread a modifié une variable, mais qu'un autre thread a été modifié. cela, provoquant des problèmes de programme. Cependant, sous Linux, comme les variables ne sont pas partagées à l'origine, le programmeur spécifie explicitement les données à partager, rendant le programme plus clair et plus sûr.
Quant à la notion de « processus » dans WIN32, sa signification est « application », ce qui équivaut à exec sous UNIX.