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去请求上锁了 所以阻塞了 是这个意思吗

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