当前位置: 首页 > news >正文

什么是死锁

什么是死锁:

多个线程互相等待对方资源,在得到所需要的资源之前都不会释放自己的资源,然后造成循环等待的现象,称为死锁。

死锁产生四大必要条件:

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;
}


http://www.mrgr.cn/news/13481.html

相关文章:

  • clucene demo编译
  • 二维数组字符串字段求并集并且去重
  • Nginx负载均衡与后端服务器自动扩展:实现高可用性架构
  • 基于STM32设计的智能饮水机_升级版(微信小程序)(213)
  • docker实战演练
  • [HZNUCTF 2023 preliminary]ppppop
  • GNU UNIX LINUX 之间的相关概念
  • C# 对桌面快捷方式的操作设置开机启动项
  • Mybatis:基础巩固-DML
  • 8月28c++
  • 【学术会议征稿】第三届公共卫生与数据科学国际学术会议(ICPHDS 2024)
  • STM32F103与ESP8266 WIFI模块的USART中断调试
  • 大模型本地化部署1-Ollama安装(Windows)
  • Docker修改容器地址
  • Unity(2022.3.41LTS) - 图形,天空盒
  • 【大模型】llama系列模型基础
  • 微服务简介
  • docker笔记
  • 【区块链 + 司法存证】数据存证区块链服务开放平台 | FISCO BCOS应用案例
  • MAC打开IDA Pro意外退出