Wer mit der WIN32-Programmierung vertraut ist, muss wissen, dass sich die Prozessverwaltungsmethode von WIN32 stark von der von Linux unterscheidet. In UNIX gibt es nur das Konzept des Prozesses, in WIN32 gibt es jedoch auch das Konzept des „Threads“, also Linux und WIN32 gibt es hier. Was ist der Unterschied?
Der Prozess/Thread in WIN32 wird von OS/2 geerbt. In WIN32 bezieht sich „Prozess“ auf ein Programm und „Thread“ ist ein Ausführungs-„Hinweis“ in einem „Prozess“. Aus Kernsicht unterscheidet sich der Multiprozess von WIN32 nicht wesentlich von dem von Linux. Der Thread in WIN32 entspricht dem Linux-Prozess und ist ein tatsächlich ausgeführter Code. In WIN32 werden Datensegmente jedoch von Threads im selben Prozess gemeinsam genutzt. Dies ist der größte Unterschied zum Linux-Prozess.
Das folgende Programm zeigt, wie der nächste Prozess von WIN32 einen Thread startet.
int g; DWORD WINAPI ChildProcess(LPVOID lpParameter){ int i; für ( i = 1; i <1000; i ++) { g++; printf( "Dies ist ein untergeordneter Thread: %dn", g ); } ExitThread( 0 ); }; void main() { int threadID; int i; g = 0; CreateThread( NULL, 0, ChildProcess, NULL, 0, &threadID ); für ( i = 1; i <1000; i ++) { g++; printf( "Dies ist der übergeordnete Thread: %dn", g ); } }
Unter WIN32 wird die Funktion „CreateThread“ zum Erstellen eines Threads verwendet. Anders als beim Erstellen eines Prozesses unter Linux wird die Ausführung des WIN32-Threads nicht vom Erstellungspunkt aus gestartet. Stattdessen gibt „CreateThread“ eine Funktion an und der Thread wird von dieser Funktion aus gestartet. Dieses Programm ist das gleiche wie das vorherige UNIX-Programm, mit zwei Threads, die jeweils 1000 Informationen drucken. threadID ist die Thread-Nummer des untergeordneten Threads. Außerdem wird die globale Variable g vom untergeordneten Thread und vom übergeordneten Thread gemeinsam genutzt. Wie Sie sehen, ist der Prozess/Thread von WIN32 komplizierter als der von Linux. Es ist nicht schwierig, einen Thread ähnlich wie WIN32 in Linux zu implementieren, solange der untergeordnete Prozess nach dem Forken die ThreadProc-Funktion aufruft und eine gemeinsame Funktion öffnet Datenbereich für globale Variablen. Unter WIN32 ist es jedoch nicht möglich, fork-ähnliche Funktionen zu implementieren. Obwohl die vom C-Sprachcompiler unter WIN32 bereitgestellten Bibliotheksfunktionen bereits mit den meisten Linux/UNIX-Bibliotheksfunktionen kompatibel sind, kann fork daher immer noch nicht implementiert werden.
Für Multitasking-Systeme ist die gemeinsame Nutzung von Datenbereichen erforderlich, aber es ist auch ein Problem, das leicht zu Verwirrung führen kann. Unter WIN32 kann ein Programmierer leicht vergessen, dass Daten zwischen Threads gemeinsam genutzt werden, nachdem ein Thread eine Variable geändert hat es, was zu Programmproblemen führt. Da Variablen jedoch unter Linux ursprünglich nicht gemeinsam genutzt werden, gibt der Programmierer die gemeinsam zu nutzenden Daten explizit an, wodurch das Programm klarer und sicherer wird.
Das Konzept des „Prozesses“ in WIN32 bedeutet „Anwendung“ und entspricht exec unter UNIX.