2007 - Pablo Abrile1 Threads Lenguajes de Programación I.
-
Upload
carmen-moncayo -
Category
Documents
-
view
229 -
download
3
Transcript of 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.
![Page 1: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/1.jpg)
2007 - Pablo Abrile 1
Threads
Lenguajes de Programación I
![Page 2: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/2.jpg)
2007 - Pablo Abrile 2
Objetivos
Evolución de la Pila de Registros de Activación en Lenguajes tipo ALGOL con unidades concurrentes
Conceptos a recordar de prácticas previas Lenguajes Tipo ALGOL Pila de Registros de Activación
Conceptos a introducir Unidades concurrentes (en conjunto con los
conceptos previos)
![Page 3: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/3.jpg)
2007 - Pablo Abrile 3
Lenguajes Tipo ALGOL
También llamados Orientados a Pila
Programa Ejecutable
Datos
La Frontera varía en cada instante de la ejecución
Heap
![Page 4: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/4.jpg)
2007 - Pablo Abrile 4
Lenguajes Tipo ALGOL
Tienen bloques (fragmentos de programa) Sin nombre Con nombre (funciones)
Dentro de estos bloques pueden definirse variables a emplear
Al llamar a estos bloques, en la pila de ejecución se crean los registros de activación donde se almacenan las variables que se emplean
![Page 5: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/5.jpg)
2007 - Pablo Abrile 5
Pila de Registros de Activación
Registro de ActivaciónConjunto de todos los elementos nuevos que
necesita un bloque para ejecutarse. Variables Dirección de retorno si llamo a una función
(cadena dinámica) Puntero al padre en el árbol de anidamiento
(cadena estática)
![Page 6: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/6.jpg)
2007 - Pablo Abrile 6
Pila de Registros de Activación
A → B → B → C → D
Programa
RA de A
RA de B
RA de B
RA de C
RA de D
![Page 7: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/7.jpg)
2007 - Pablo Abrile 7
Pila de Registros de ActivaciónUnidades Concurrentes
Programa
RA de A
RA de B
RA de B
RA de C
RA de D
Thread 1 Thread 2 …….. Thread nThread Ppal
Variables Globales – Descriptores de archivos – Mem. De Heap - etc.
![Page 8: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/8.jpg)
2007 - Pablo Abrile 8
Ejercicio Ejemplo
Programa Ejecutable#include <pthread.h>#include <stdio.h>
Headers de la librería POSIX Threads
void *XX(void) {int i;printf("%x\n",&i);
}
Función XXSerá llamada desde-Thread creado con pthread_create- Thread Principal (main)
int main (){ pthread_t thread; pthread_create(&thread, NULL, XX, NULL); XX(); XX(); XX();
}
Thread Principal
Creación del Thread que llamará a XX
Invocaciones a XX desde el thread principal
![Page 9: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/9.jpg)
2007 - Pablo Abrile 9
Salida Esperada
XX se llama 4 veces en total3 desde el main. En adelante Thread
Principal1 desde el thread creado con
pthread_create. En adelante Thread 1Se esperan: 4 impresiones por pantalla
¿Que ocurre con las direcciones de memoria que serán impresas?
![Page 10: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/10.jpg)
2007 - Pablo Abrile 10
Pilas de Ejecución
1 para el Thread Principal (main) 1 para el Thread 1 (creado por
pthread_create)
![Page 11: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/11.jpg)
2007 - Pablo Abrile 11
XX() (thread principal)
Programa
XX()
Thread 1Thread Principal
i
Dirección bfaba8d4
Primer Llamado a XX()
![Page 12: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/12.jpg)
2007 - Pablo Abrile 12
Programa
Thread 1Thread Principal
Al terminar el primer llamado el registro de activación se quita de la pila
![Page 13: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/13.jpg)
2007 - Pablo Abrile 13
XX() (thread principal)
Programa
XX()
Thread 1Thread Principal
i
Dirección bfaba8d4
Segundo Llamado a XX()
Se vuelve a apilar en la misma posición
![Page 14: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/14.jpg)
2007 - Pablo Abrile 14
Programa
Thread 1Thread Principal
Al terminar el segundo llamado el registro de activación se quita de la pila
![Page 15: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/15.jpg)
2007 - Pablo Abrile 15
XX() (thread principal)
Programa
XX()
Thread 1Thread Principal
i
Dirección bfaba8d4
Tercer Llamado a XX()
Se vuelve a apilar nuevamente en la misma posición
![Page 16: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/16.jpg)
2007 - Pablo Abrile 16
XX() Thread 1
Programa
XX()
Thread 1Thread Principal
i
Dirección b7e1d3c4
Llamado a XX()Desde el thread creado con pthread_create (Thread 1)
![Page 17: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/17.jpg)
2007 - Pablo Abrile 17
Salida Esperada
bfaba8d4 bfaba8d4 bfaba8d4 b7e1d3c4
El orden puede variar de acuerdo a cuando se ejecute el Thread 1
Puede hacerlo entre las llamadas a XX() desde el Thread Principal
![Page 18: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/18.jpg)
2007 - Pablo Abrile 18
Salida Obtenida
![Page 19: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/19.jpg)
2007 - Pablo Abrile 19
Orden de aparición alterno
Introducimos una demora en la función XX Entre los tres llamados del thread principal
a XX se alternará el llamado al thread creado con pthread_create
void *XX(void){int i;for (i=0; i<999999999; i++); //Demora antes de imprimir. printf("%x\n",&i);
}
![Page 20: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/20.jpg)
2007 - Pablo Abrile 20
Salida
Debido a la demora, se alternan las salidas El resultado sigue siendo el mismo ya que
las pilas de ejecución son separadas para cada thread!!
Salida de Thread 1
Salida de main
![Page 21: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/21.jpg)
2007 - Pablo Abrile 21
Ejercicio 2 2 threads
ThreadHola: Imprime HolaThreadMundo: Imprime Mundo
#include <pthread.h>#include <stdio.h>
void *mensaje(void* msj){printf("%s\n",msj);
}int main (){
pthread_t threadHola,threadMundo; pthread_create(&threadHola, NULL, mensaje, "Hola"); pthread_create(&threadMundo, NULL, mensaje, "Mundo");
}
El cuarto argumento de pthread_create es el argumento a pasar a mensaje cuando se crea el thread.En este caso, el mensaje a imprimir por el thread
![Page 22: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/22.jpg)
2007 - Pablo Abrile 22
Resultado
En general, por el poco tiempo de procesamiento que lleva la función “mensaje” se verá la respuesta “Hola” “Mundo” (aunque puede no ser así).
Introducimos una demora en la función mensaje para ver si el orden de impresión puede variar
![Page 23: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/23.jpg)
2007 - Pablo Abrile 23
void *mensaje(void* msj){int i;for (i=0; i<999999999; i++); //Demora introducidaprintf("%s\n",msj);
}
![Page 24: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/24.jpg)
2007 - Pablo Abrile 24
Para probar los ejercicios
Comprobar que se tienen instaladas las librerías de POSIX threads.
Realizar un script “compilar” que contengagcc $1.c -o $1 –lpthread
./compilar 01_threadsCompila 01_threads.c
./01_threads
![Page 25: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/25.jpg)
2007 - Pablo Abrile 25
Información de Interés
Fork(): Múltiples procesos vs. Threads
![Page 26: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/26.jpg)
2007 - Pablo Abrile 26
Para mayor información
Material disponible en el sitio web de la cátedra http://www.exa.unicen.edu.ar/catedras/lengprg1/
![Page 27: 2007 - Pablo Abrile1 Threads Lenguajes de Programación I.](https://reader035.fdocumento.com/reader035/viewer/2022062305/5665b45d1a28abb57c90e0ee/html5/thumbnails/27.jpg)
2007 - Pablo Abrile 27
FIN