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

什么是死锁

什么是死锁:

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

死锁产生四大必要条件:

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.kler.cn/a/280333.html

相关文章:

  • 大模型从入门到精通—— LLM 应用评估(二)
  • 【C++ 面试 - 面向对象】每日 3 题(七)
  • RabbitMQ中的死信交换机?(RabbitMQ延迟队列有了解过吗)
  • 中庸就是五五开,各打五十大板吗
  • 8.28-回顾+容器与主机之间的通信+跨主机容器之间的通信
  • 如何监控Eureka集群:Prometheus与Grafana的监控集成
  • 音频分割软件有什么?最方便的音频分割软件分享给你
  • client网络模块的开发和client与server端的部分联动调试
  • FPGA工程师成长路线(持续更新ing,欢迎补充)
  • Ps:首选项 - 常规
  • golang-gin使用中间件处理文本-时间字符串格式
  • 解决 VMware 中 Ubuntu文件系统磁盘空间不足
  • 二十九、channel的select
  • 如何设置Winfrom中dataGridView中的内容换行并行高自适应
  • 不会PS怎么快速抠图?试试这3种方法,抠图干净又高效!
  • VSCode插件
  • 简单实现进度条效果(vue2)
  • 2024了,Neo4j能显示节点图片吗?
  • 【架构-24】XML和JSON
  • 文心快码帮你解大厂面试题:TCP关闭连接的过程,为什么要4次挥手,为什么最大等待时间是2*MSL?