Sesión 10: Concurrencia y Paralelismo

PREGUNTA 71. ¿Qué diferencia observas en el tiempo de ejecución de cada uno de los programas? ¿A qué se debe?

0:05.82 createProcesses
0:01.89	createThreads

El programa con threads es mucho más rápido. Los procesos consumen más recursos que los threads.

PREGUNTA 72. En el programa fork_compartMem.c, ¿qué valor ve el proceso hijo al principio de su ejecución en las variables a y pidPadre? ¿Y al final? ¿qué valores ve el proceso padre al final de su ejecución? ¿Cómo explicas este comportamiento?

a=666, pidPadre = 10919
a=1, pidPadre = 10919
a=666

fork crea una copia en el hijo de la memoria de padre, por lo cual
a tendrá el valor que dejó el padre en el momento de hacer el fork().

Después el hijo modifica el valor, pero solo será visible en su contexto,
se habrá cambiado el valor en SU memoria.

PREGUNTA 73. En el programa thread_compartMem.c, ¿qué valor ve el pthread hijo al principio de su ejecución en las variables a y pidPadre? ¿Y al final? ¿qué valores ve el proceso padre al final de su ejecución? ¿Cómo explicas este comportamiento?

a=666, pidPadre = 10921
a=1, pidPadre = 10921
a=1

En este caso la memoria .data (variables globales) es compartida,
por lo que toda modificación que haga el hijo la verá el padre.

PREGUNTA 74. ¿A qué se debe este error?

la variable "a" no está declarada como global.

PREGUNTA 75. En la línea marcada como "PUNTO 1" ¿en qué posición de memoria se está guardando el valor 1111? ¿Qué variable ocupa esa posición de memoria? ¿Qué mensajes muestran el padre y el pthread? ¿Sería posible que un pthread acceda a las variables locales de otro pthread? ¿En qué condiciones?

En "0xbfbb5594"; la dirección de la variable local "a". Los mensajes
nos hacen ver que el thread tiene acceso a la variable local declarada
por el padre.

Sí que es posible, en las mismas condiciones que acabamos de ver;
declarando un puntero global con la dirección de la variable a modificar
y que más adelante será accesible por parte del/los thread/s.

PREGUNTA 76. ¿Qué mensajes muestran ahora el padre y el pthread? ¿A qué se debe esta diferencia en el comportamiento? 

Ahora el thread no muestra mensajes porque el padre acaba antes que a este le de tiempo a mostrarlos.

PREGUNTA 77. ¿El proceso principal imprime siempre el mismo valor? ¿A qué es debido?

A una race condition.

PREGUNTA 78.  Anota en el fichero entrega.txt qué líneas de código forman la región crítica  que provoca la condición de carrera.

for (i=0; i<max; i++) {
	data++;
}

