哈哈.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日

悬赏问题

  • ¥50 关于#html5#的问题:H5页面用户手机返回的时候跳转到指定页面例如(语言-javascript)
  • ¥15 无法使用此凭据登录,因为你的域不可用,如何解决?(标签-Windows)
  • ¥15 yolov9的训练时间
  • ¥15 二叉树遍历没有报错但无法正常运行
  • ¥15 在linux系统下vscode运行robocup3d上场球员报错
  • ¥15 Python语言实验
  • ¥15 SAP HANA SQL 增加合计行
  • ¥20 用C#语言解决一个英文打字练习器,有偿
  • ¥15 srs-sip外部服务 webrtc支持H265格式
  • ¥15 在使用abaqus软件中,继承到assembly里的surfaces怎么使用python批量调动