思路与qt中那个多线程中的死锁类似,链接如下:
https://blog.csdn.net/weixin_47564352/article/details/115019008
#include<stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>
pthread_mutex_t mutex1;
pthread_mutex_t mutex2;
void* threadFunc1(void* arg)
{
while(1)
{
sleep(1);
printf("thread1 begin\n");
pthread_mutex_lock(&mutex1);
printf("thread1 get mutex1\n");
pthread_mutex_lock(&mutex2);
printf("thread1 get mutex2\n");
printf("thread%d begin working\n", (int)arg);
pthread_mutex_unlock(&mutex2);
pthread_mutex_unlock(&mutex1);
printf("thread1 end\n");
}
}
void* threadFunc2(void* arg)
{
while(1)
{
sleep(1);
printf("thread2 begin\n");
pthread_mutex_lock(&mutex1);
printf("thread2 get mutex1\n");
pthread_mutex_lock(&mutex2);
printf("thread2 get mutex2\n");
printf("thread%d begin working\n", (int)arg);
pthread_mutex_unlock(&mutex2);
pthread_mutex_unlock(&mutex1);
printf("thread2 end\n");
}
}
int main(int argc, char** argv)
{
pthread_t thread1;
pthread_t thread2;
pthread_mutex_init(&mutex1, NULL);
pthread_mutex_init(&mutex2, NULL);
if(pthread_create(&thread1, NULL, threadFunc1, (void*)1) != 0)
{
printf("pthread1 creadte error\n");
exit(-1);
}
if(pthread_create(&thread2, NULL, threadFunc2, (void*)2) != 0)
{
printf("pthread2 creadte error\n");
exit(-1);
}
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
pthread_mutex_destroy(&mutex1);
pthread_mutex_destroy(&mutex2);
return 0;
}
输出: