Pregunta

mi pregunta es algo conceptual, ¿cómo es el proceso de los padres con datos compartidos proceso hijo creado por una llamada fork() o con un hilo creado por pthread_create()

Por ejemplo, son variables globales pasaron directamente al proceso hijo y si es así, ¿la modificación de esa variable hecha por valor del efecto del proceso hijo en proceso padre?

aprecio respuestas parciales y completas de antemano, si me falta ningún recurso existente, lo siento, he hecho un poco de búsqueda en Google, pero no pude encontrar buenos resultados

Gracias de nuevo por su tiempo y respuestas

¿Fue útil?

Solución

La semántica de tenedor () y pthread_create () son un poco diferentes.

tenedor () se creará un nuevo proceso, donde las variables globales estarán separados entre los padres y los niños. La mayoría de las implementaciones del sistema operativo utilizarán semántica de copia en escritura, lo que significa que tanto el proceso de padre-hijo y utilizarán las mismas páginas de memoria física para todas las variables globales hasta que uno de los procesos intentos para editar la memoria física, momento en el que una copia de esa página está hecha, de modo que ahora cada proceso obtiene su propia copia y no ve del otro proceso, por lo que se aíslan los procesos.

pthread_create () en el otro lado, crea un nuevo hilo dentro del mismo proceso. El nuevo hilo tendrá un espacio de pila separado de los otros hilos de ejecución del mismo proceso, sin embargo, las variables globales y espacio de almacenamiento dinámico se comparten entre todos los hilos de un mismo proceso. Es por esto que a menudo necesita un mutex para coordinar el acceso a una pieza compartida de la memoria entre múltiples hilos de un mismo proceso.

TL; DR versión: con un tenedor (), no ve los cambios del otro individuo; con pthread_create () lo hace.

Otros consejos

Un tenedor crea una copia casi exacta del proceso de llamada, incluyendo los descriptores de memoria y de archivo. Las variables globales se copian junto con todo lo demás, pero no son de ninguna manera relacionado con el proceso padre. Dado que los descriptores de archivos también se copian, padres e hijos pueden interactuar a través de éstos (siempre y cuando estén correctamente configurado, por lo general a través de la tubería o socketpair).

Hay una gran diferencia entre los procesos creados por fork y entre los hilos creados con pthread_create. Procesos no comparten las variables globales y deben comunicarse a través de tuberías, tomas de corriente, u otras herramientas proporcionadas por el sistema operativo. Una buena solución es MPI - que es un mensaje de paso de la biblioteca para la comunicación entre procesos

.

Los hilos son bastante diferentes. Un hilo creado con acciones pthread_create todas las variables globales con su interlocutor. Por otra parte, la persona que llama puede pasar una estructura arbitraria en la rosca, y esta estructura también será compartida. Esto significa que uno debe tener mucho cuidado cuando se programa con hilos - tales cantidades de intercambio son peligrosos y propenso a errores. El API pthread proporciona mutexes y condiciones para robusta sincronización entre hilos (aunque todavía requiere práctica y experiencia para implementar correctamente).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top