哈哈.txt 2021-10-25 20:17 采纳率: 100%
浏览 19
已结题

Linux中死锁的两种情况第二种死锁是什么意思 是线程1有了共享资源1的锁 但是不去解锁 然后去请求资源二的锁吗

1.对一个锁反复lock。
2.两个线程,各自持有一把锁,去请求另一把锁。

img

第二种死锁是什么意思 是线程1有了共享资源1的锁 但是不去解锁 然后去请求资源二的锁吗


pthread_mutex_t mutex1, mutex2;
int var2 = 200;
int var1 = 100;
void *tfn(void * arg)
{
    while(1){
        printf("------------------pthread\n");
        pthread_mutex_lock(&mutex2);    //加锁---2
        var2 = 250;
        printf("var2 = %d\n", var2);
        //pthread_mutex_unlock(&mutex2);    //解锁---2
        sleep(1);
        pthread_mutex_lock(&mutex1);    //加锁 ---1
        var1 = 150;
        printf("var1 = %d\n", var1);
        pthread_mutex_unlock(&mutex1);  //解锁 ---1
        sleep(1);
    }
    return NULL;
}
int main(void)
{
    pthread_t tid;
    printf("var1 = %d var2 = %d\n", var1, var2);
    sleep(3);
    pthread_create(&tid, NULL, tfn, NULL);
    while(1){
        printf("------------------main\n");
        pthread_mutex_lock(&mutex1);    //加锁 ---1
        var1 = 11111111;
        printf("var1 = %d\n", var1);
        //pthread_mutex_unlock(&mutex1);    //解锁 ---1
        sleep(1);
       pthread_mutex_lock(&mutex2);    //加锁---2
        var2 = 22222222;
        printf("var2 = %d\n", var2);
        pthread_mutex_unlock(&mutex2);  //解锁---2
        sleep(1);
    }
    pthread_join(tid, NULL);
    return 0;
}

运行结果也是阻塞 但是我对1没解锁 2直接对1去请求上锁了 所以阻塞了 是这个意思吗
  • 写回答

1条回答 默认 最新

  • Fighting Horse 音视频领域新星创作者 2021-10-25 20:43
    关注

    是这个意思,两个线程都不是故意不去解锁,也不是忘了解锁,而是它的工作没有完成,还不能解锁,为什么工作没有完成呢,因为它还在等另一个锁

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月2日
  • 已采纳回答 10月25日
  • 创建了问题 10月25日

悬赏问题

  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP