-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhilos.c
80 lines (64 loc) · 1.98 KB
/
hilos.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*
* Ejemplo de hilos desincronizados
*
* Ing. Julian Perelli
* Catedra de Sistemas Operativos
* UTN - FRLP
* 2012
*
* Posibles prerequisitos:
* apt-get install gcc build-essential glibc libc6
*
* Compilacion:
* gcc hilos.c -ohilos -lpthread
*
* Ejecucion:
* ./hilos
*
*/
// libreria de funciones de hilos
#include <pthread.h>
// libreria de manejo de entrada/salida (stdin/out/err)
#include <stdio.h>
// directiva al compilador:
// se reemplaza NUM_THREADS por el numero, antes de la fase de compilacion
#define NUM_THREADS 100
// funcion que ejecutara el hilo
void *PrintHello(void *threadid)
{
// declaracion de variable long (mayor rango que int)
long tid;
// typecast (era void, ahora es long)
tid = (long)threadid;
// imprime en pantalla el thread id
printf("Soy el hilo #%ld!\n", tid);
// termina la ejecucion avisando al padre
pthread_exit(NULL);
}
// funcion principal que se ejecuta
// argc es la cantidad de argumentos
// argv es un array de strings, son los argumentos
int main (int argc, char *argv[])
{
// vector de threads (cada uno de tipo pthread)
// longitud del vector = NUM_THREADS
pthread_t threads[NUM_THREADS];
// var donde se guarda el thread id
long t;
// bucle de repeticion for:
// desde t=0
// mientras t<NUM_THREADS
// realizando t++ (incremento de t en 1) en cada iteracion
for ( t = 0; t < NUM_THREADS; t++ ) {
// Imprimir en pantalla un mensaje previo a la creacion de un hilo
printf("En el main: creando hilo %ld\n", t);
// Creacion del hilo:
// &threads[t]: puntero a thread id
// NULL: atributos de creacion (NULL=default)
// PrintHello: funcion que ejecutara el thread
// (void *)t: variable t (indice de este bucle), se pasa al thread, y la recibe como unico parametro
pthread_create(&threads[t], NULL, PrintHello, (void *)t);
}
// lo ultimo que main debe hacer
pthread_exit(NULL);
}