哈哈.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 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办