什么是死锁:
多个线程互相等待对方资源,在得到所需要的资源之前都不会释放自己的资源,然后造成循环等待的现象,称为死锁。
死锁产生四大必要条件:
1、资源互斥
2、占有且等待
3、资源不可剥夺
4、环路等待
以上四个条件缺一不可,只要有一个不满足就不能构成死锁。
#include <stdio.h> #include <unistd.h> #include <pthread.h> // 创建三个互斥锁并初始化 pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mutex3 = PTHREAD_MUTEX_INITIALIZER; void* run1(void* arg) { pthread_mutex_lock(&mutex1); usleep(100); pthread_mutex_lock(&mutex2); printf("没有构成死锁!!!\n"); pthread_mutex_unlock(&mutex2); pthread_mutex_unlock(&mutex1); } void* run2(void* arg) { pthread_mutex_lock(&mutex2); usleep(100); pthread_mutex_lock(&mutex3); printf("没有构成死锁!!!\n"); pthread_mutex_unlock(&mutex3); pthread_mutex_unlock(&mutex2); } void* run3(void* arg) { pthread_mutex_lock(&mutex3); usleep(100); pthread_mutex_lock(&mutex1); printf("没有构成死锁!!!\n"); pthread_mutex_unlock(&mutex1); pthread_mutex_unlock(&mutex3); } int main(int argc,const char* argv[]) { // 创建三个线程 pthread_t tid1,tid2,tid3; pthread_create(&tid1,NULL,run1,NULL); pthread_create(&tid2,NULL,run2,NULL); pthread_create(&tid3,NULL,run3,NULL); // 主线程等待三个子线程结束 pthread_join(tid1,NULL); pthread_join(tid2,NULL); pthread_join(tid3,NULL); return 0; }