使用以下代码,我陷入僵局:
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可以工作,那我应该用什么作为子类?