Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rdemeter
GitHub Repository: rdemeter/so
Path: blob/master/lab8/deadlock.c
221 views
1
/* În acest exemplu, thread1 încearcă să blocheze resursa 1 și apoi resursa 2, în timp ce thread2 încearcă
2
să blocheze resursa 2 și apoi resursa 1. Dacă cele două thread-uri rulează în paralel, există posibilitatea
3
ca ele să blocheze una pe cealaltă și să ajungă într-o stare de deadlock, în care niciuna dintre ele nu poate face progres */
4
5
#include <stdio.h>
6
#include <pthread.h>
7
8
pthread_mutex_t resource1 = PTHREAD_MUTEX_INITIALIZER;
9
pthread_mutex_t resource2 = PTHREAD_MUTEX_INITIALIZER;
10
11
void *thread1()
12
{
13
pthread_mutex_lock(&resource1);
14
printf("Thread 1: Locked resource 1\n");
15
16
// Acest delay simulază procesarea resursei 1
17
sleep(1);
18
19
pthread_mutex_lock(&resource2);
20
printf("Thread 1: Locked resource 2\n");
21
22
// Procesarea resursei 2
23
24
pthread_mutex_unlock(&resource2);
25
printf("Thread 1: Unlocked resource 2\n");
26
27
pthread_mutex_unlock(&resource1);
28
printf("Thread 1: Unlocked resource 1\n");
29
30
return NULL;
31
}
32
33
void *thread2()
34
{
35
pthread_mutex_lock(&resource2);
36
printf("Thread 2: Locked resource 2\n");
37
38
// Acest delay simulază procesarea resursei 2
39
sleep(1);
40
41
pthread_mutex_lock(&resource1);
42
printf("Thread 2: Locked resource 1\n");
43
44
// Procesarea resursei 1
45
46
pthread_mutex_unlock(&resource1);
47
printf("Thread 2: Unlocked resource 1\n");
48
49
pthread_mutex_unlock(&resource2);
50
printf("Thread 2: Unlocked resource 2\n");
51
52
return NULL;
53
}
54
55
int main()
56
{
57
pthread_t t1, t2;
58
pthread_create(&t1, NULL, thread1, NULL);
59
pthread_create(&t2, NULL, thread2, NULL);
60
61
pthread_join(t1, NULL);
62
pthread_join(t2, NULL);
63
64
return 0;
65
}
66
67