在Linux内核中使用spin_lock获得死锁

时间:2018-09-06 19:45:47

标签: linux-kernel locking embedded-linux deadlock spinlock

使用以下代码,我陷入僵局:

void funcB()
{
    spin_lock(&my_lock);
    // do some stuff
    spin_unlock(&my_lock);
}
void funcA()
{
    spin_lock(&my_lock);
    // do some stuff
    funcB();
    // do some more
    spin_unlock(&my_lock);
}

解决此问题的一种方法是添加一个名为__funcB的新函数,如下所示:

void __funcB()
{
    // do some stuff
}
void funcB()
{
    spin_lock(&my_lock);
    __funcB();
    spin_unlock(&my_lock);
}

void funcA()
{
    spin_lock(&my_lock);
    // do some stuff
    __funcB();
    // do some more
    spin_unlock(&my_lock);
}

我想知道是否有一种方法可以在同一上下文中多次调用spin_lock? 在谷歌搜索时,我遇到了spin_lock_nested,使用spin_lock_nested不会死锁吗? 如果spin_lock_nested可以工作,那我应该用什么作为子类?

0 个答案:

没有答案