2009-07-02 41 views
9

en un sistema Linux, ¿el proceso hijo ver los hilos existentes del mismo modo que el proceso padre?tenedor y roscas existentes?

int main() { 

    //create thread 1 

    int child_pid = fork(); 

    if (0 == child_pid) 
    { 
     .. 
    } 
    else 
    { 
     .. 
    } 

Como todo el espacio de direcciones se copia para el proceso hijo, ¿qué ocurre con el estado de los hilos? ¿Qué pasa si el hilo 1 en el segmento anterior está esperando una señal condicional? ¿Está también en estado de espera en proceso hijo?

Respuesta

0

Hilos no se heredan de un proceso hijo en un sistema Linux usando tenedor(). Una fuente en profundidad está aquí: http://linas.org/linux/threads-faq.html

+2

Eso FAQ está muy de moda. La mayor diferencia visible para el usuario es que LinuxThreads ha sido obsoleto por NPTL desde kernel 2.6 y glibc 2.3, que resuelve todos los problemas pendientes con un comportamiento de subprocesamiento similar al de POSIX. – ephemient

13

Hilos en Linux trata hoy en día para mantenerse complient POSIX. Sólo se replica el subproceso de llamada, no otros hilos (tenga en cuenta que por ejemplo en Solaris se puede elegir qué tenedor no dependiendo de lo que la biblioteca se vincula a)

De http://www.opengroup.org/onlinepubs/000095399/functions/fork.html:

Un proceso se crea con una solo hilo. Si un proceso multiproceso de llama fork(), el nuevo proceso contendrá una réplica de la cadena de llamada y su espacio de direcciones completo, incluyendo posiblemente los estados de mutexes y otros recursos. En consecuencia, para evitar errores, el proceso hijo solo puede ejecutar operaciones async-signal-safe hasta en el momento en que se llame a una de las funciones de exec. Los manipuladores Fork se pueden establecer por medio de de la función pthread_atfork() en con el fin de mantener la aplicación invariantes en llamadas fork().

+1

Gracias. El enlace es de gran ayuda. – Mac13