Las personas que están familiarizadas con la programación WIN32 deben saber que el método de gestión de procesos de WIN32 es muy diferente al de Linux. En UNIX, solo existe el concepto de proceso, pero en WIN32 también existe el concepto de "hilo", por lo que Linux. y WIN32 están aquí ¿Cuál es la diferencia?
El proceso/hilo en WIN32 se hereda de OS/2. En WIN32, "proceso" se refiere a un programa y "hilo" es una "pista" de ejecución en un "proceso". Desde un punto de vista central, el multiproceso de WIN32 no es muy diferente del de Linux. El hilo en WIN32 es equivalente al proceso de Linux y es un código de ejecución real. Sin embargo, en WIN32, los segmentos de datos se comparten entre subprocesos del mismo proceso. Ésta es la mayor diferencia con el proceso de Linux.
El siguiente programa muestra cómo el siguiente proceso de WIN32 inicia un hilo.
intg; DWORD WINAPI ChildProcess (LPVOID lpParameter) { ent i; para (yo = 1; yo <1000; yo ++) { g++; printf( "Este es el hilo secundario: %dn", g ); } Hilo de salida( 0 ); }; vacío principal() { int ID de hilo; ent i; gramo = 0; CreateThread(NULL, 0, ChildProcess, NULL, 0, &threadID); para (yo = 1; yo <1000; yo ++) { g++; printf( "Este es el hilo principal: %dn", g ); } }
En WIN32, la función CreateThread se utiliza para crear un subproceso. A diferencia de la creación de un proceso en Linux, el subproceso WIN32 no comienza a ejecutarse desde el punto de creación. En cambio, CreateThread especifica una función y el subproceso comienza a ejecutarse desde esa función. Este programa es el mismo que el programa UNIX anterior, con dos subprocesos, cada uno de los cuales imprime 1000 piezas de información. threadID es el número de subproceso secundario. Además, la variable global g es compartida por el subproceso secundario y el subproceso principal. Esta es la mayor diferencia con Linux. Como puede ver, el proceso/hilo de WIN32 es más complicado que el de Linux. No es difícil implementar un hilo similar a WIN32 en Linux, siempre que después de la bifurcación, el proceso hijo llame a la función ThreadProc y abra un hilo compartido. área de datos para variables globales Sin embargo, es imposible implementar funciones similares a la bifurcación en WIN32. Por lo tanto, aunque las funciones de biblioteca proporcionadas por el compilador de lenguaje C en WIN32 ya son compatibles con la mayoría de las funciones de biblioteca de Linux/UNIX, aún no se puede implementar la bifurcación.
Para los sistemas multitarea, compartir áreas de datos es necesario, pero también es un problema que fácilmente puede causar confusión. En WIN32, un programador puede olvidar fácilmente que los datos entre subprocesos se comparten después de que un subproceso modifica una variable, pero otro subproceso modifica. esto, causando problemas en el programa. Sin embargo, en Linux, dado que las variables no se comparten originalmente, el programador especifica explícitamente los datos que se compartirán, lo que hace que el programa sea más claro y seguro.
En cuanto al concepto de "proceso" en WIN32, su significado es "aplicación", que equivale a exec en UNIX.