La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Aplicaciones Multihilo

Presentaciones similares


Presentación del tema: "Aplicaciones Multihilo"— Transcripción de la presentación:

1 Aplicaciones Multihilo
Universidad Tecnológica Nacional Facultad Regional Buenos Aires Ingeniería en Sistemas de Información Aplicaciones Multihilo Threads

2 Threads – Introducción
Una aplicación está compuesta por uno o más procesos, los cuales a su vez podrían estar divididos en threads Aplicación Procesos Threads

3 Threads – Introducción
Dentro del espacio de ejecución de un proceso, los threads funcionan de manera “simultánea” (concurrencia) Proceso A Todos los threads comparten la información del proceso por encontrarse dentro del mismo. Proceso A int a = 33; a = a + 1 a = a - 1 print a; Hilo 1 Hilo 2 Situaciones como esta pueden llevar a codigo no deterministico. El acceso a los recursos debe ser correctamente sincronizado.

4 Threads – ejemplo 1/2 #include <pthread.h>
#include <stdio.h> void *print_fnc( void *ptr ); int p = 5; int main() { pthread_t thr1, thr2; char *m1 = "Thr1"; char *m2 = "Thr2"; int r1, r2; r1 = pthread_create( &thr1, NULL, print_fnc, (void*) m1); r2 = pthread_create( &thr2, NULL, print_fnc, (void*) m2); pthread_join( thr2, NULL); pthread_join( thr1, NULL); printf("Thread 1 devolvio: %d y el Thread 2: %d\n", r1, r2); }

5 Threads – ejemplo 2/2 Makefile: all:
void *print_fnc( void *ptr ) { int i = 0; char *message; message = (char *) ptr; for (i; i<1000; i++) { p = p + 1; printf("%s : %d\n", (char*)message, p); sleep(1); } Makefile: all: gcc -ggdb thread.c -o thread -lpthread

6 Threads – ejecución debian:~/c/threads# make gcc -ggdb thread.c -o thread -lpthread debian:~/c/threads# ./thread Thr2 : 6 Thr1 : 7 Thr1 : 8 Thr2 : 9 Thr2 : 11 Thr1 : 10 Thr1 : 12 Thr2 : 13 Thr1 : 14 Thr2 : 15 Thr1 : 16 Thr2 : 16 Thr2 : 17 Thr1 : 17 Thr1 : 18 Thr2 : 19 Thr2 : 20 Thr1 : 21 Thr1 : 22 Noten como el procesador planifica estos hilos según va teniendo disponibilidad. Nada garantiza que se ejecute uno y luego el otro. Situaciones anómalas se pueden producir al no proteger correctamente la sección crítica !!!! !!!!

7 Threads – sincronización
#include <pthread.h> #include <stdio.h> void *print_fnc( void *ptr ); int p = 5; pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; void *print_fnc( void *ptr ) { int i = 0; char *message; message = (char *) ptr; for (i; i<1000; i++) { pthread_mutex_lock( &mutex1 ); p = p + 1; pthread_mutex_unlock( &mutex1 ); printf("%s : %d\n", (char*)message, p); sleep(1); }


Descargar ppt "Aplicaciones Multihilo"

Presentaciones similares


Anuncios Google