mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-08 08:26:14 +00:00
44 lines
747 B
C
44 lines
747 B
C
/* Simple possible deadlock */
|
|
#include <pthread.h>
|
|
|
|
static pthread_mutex_t m1 = PTHREAD_MUTEX_INITIALIZER;
|
|
static pthread_mutex_t m2 = PTHREAD_MUTEX_INITIALIZER;
|
|
|
|
static void *t1(void *v)
|
|
{
|
|
pthread_mutex_lock(&m1);
|
|
pthread_mutex_lock(&m2);
|
|
pthread_mutex_unlock(&m1);
|
|
pthread_mutex_unlock(&m2);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static void *t2(void *v)
|
|
{
|
|
pthread_mutex_lock(&m2);
|
|
pthread_mutex_lock(&m1);
|
|
pthread_mutex_unlock(&m1);
|
|
pthread_mutex_unlock(&m2);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int main()
|
|
{
|
|
pthread_t a, b;
|
|
|
|
/* prevent spurious messages from the dynamic linker */
|
|
pthread_mutex_lock(&m1);
|
|
pthread_mutex_unlock(&m1);
|
|
|
|
pthread_create(&a, NULL, t1, NULL);
|
|
pthread_create(&b, NULL, t2, NULL);
|
|
|
|
pthread_join(a, NULL);
|
|
pthread_join(b, NULL);
|
|
|
|
return 0;
|
|
}
|
|
|