У меня есть две функции, скажем, foo () и bar (), я хочу, чтобы они были взаимоисключающими, то есть полностью блокировали запуск foo (), когда работает bar (), или полностью блокировали запуск bar (), когда foo() выполняется для обеспечения безопасности потоков.
Однако я могу вызвать bar () внутри foo (), то есть когда foo () вызывает bar () внутри foo (), пусть bar () запускается,но никакие другие темы не вызывают bar ().
Возможно ли это?Если да, можете ли вы дать общую идею, пожалуйста?
Попытка использовать один или несколько мьютексов в C, легко сделать две функции взаимоисключающими, но тогда я не могу вызвать bar () внутри foo (),они войдут в тупик.
Я не могу просто разблокировать мьютекс прямо перед вызовом bar () внутри foo (), потому что я не могу гарантировать, что следующий запуск bar () будет вызван внутри foo ().
Я ищу решение, при котором foo блокирует bar, а bar блокирует foo, если они запускаются в разных потоках.но когда foo вызывает bar внутри своего тела (тот же поток), пусть bar запускается.
Спасибо