哈哈.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 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错