Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rdemeter
GitHub Repository: rdemeter/so
Path: blob/master/lab8/exemplu.c
221 views
1
#include <stdio.h>
2
#include <pthread.h>
3
#define NUM_THREADS 5
4
5
// mutex global
6
pthread_mutex_t mutex;
7
int global_counter = 0;
8
9
void *thread_routine( )
10
{
11
pthread_mutex_lock(&mutex);
12
pthread_mutex_lock(&mutex);
13
14
printf("am ajuns in zona protejata de mutex\n");
15
16
pthread_mutex_unlock(&mutex);
17
pthread_mutex_unlock(&mutex);
18
}
19
20
int main(void) {
21
int i;
22
pthread_t tids[NUM_THREADS];
23
24
// definim atribute, le initializam si marcam tipul ca fiind recursiv.
25
pthread_mutexattr_t attr;
26
pthread_mutexattr_init(&attr);
27
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
28
// definim un mutex recursiv, il initializam cu atributele definite anterior
29
30
pthread_mutex_init(&mutex, &attr);
31
32
pthread_mutexattr_destroy(&attr);
33
34
// firele de executie vor executa codul functiei 'thread_routine'
35
// in locul unui pointer la date utile, se trimite in ultimul argument
36
// un intreg - identificatorul firului de executie
37
for (i = 0; i < NUM_THREADS; i++)
38
pthread_create(&tids[i], NULL, thread_routine, (void *) i);
39
40
// asteptam ca toate firele de executie sa se termine
41
for (i = 0; i < NUM_THREADS; i++)
42
pthread_join(tids[i], NULL);
43
44
// eliberam resursele mutexului
45
// eliberare mutex
46
pthread_mutex_destroy(&mutex);
47
return 0;
48
}
49
50
51