blob: 1142f5cfe9a025dbcf7de2e31635704e06bb9b65 [file] [log] [blame]
sewardjb4112022007-11-09 22:49:28 +00001/* Simple possible deadlock */
2#include <pthread.h>
3
4static pthread_mutex_t m1 = PTHREAD_MUTEX_INITIALIZER;
5static pthread_mutex_t m2 = PTHREAD_MUTEX_INITIALIZER;
6
7static void *t1(void *v)
8{
9 pthread_mutex_lock(&m1);
10 pthread_mutex_lock(&m2);
11 pthread_mutex_unlock(&m1);
12 pthread_mutex_unlock(&m2);
13
14 return 0;
15}
16
17static void *t2(void *v)
18{
19 pthread_mutex_lock(&m2);
20 pthread_mutex_lock(&m1);
21 pthread_mutex_unlock(&m1);
22 pthread_mutex_unlock(&m2);
23
24 return 0;
25}
26
27int main()
28{
29 pthread_t a, b;
30
31 /* prevent spurious messages from the dynamic linker */
32 pthread_mutex_lock(&m1);
33 pthread_mutex_unlock(&m1);
34
35 pthread_create(&a, NULL, t1, NULL);
36 pthread_create(&b, NULL, t2, NULL);
37
38 pthread_join(a, NULL);
39 pthread_join(b, NULL);
40
41 return 0;
42}
43