С кодом ниже я захожу в тупик:
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 будет работать, что я должен использовать в качестве подкласса?