Вот переписывание вашего примера с использованием Boost.Thread: я удалил комментарии, но в противном случае это должно быть переписывание 1 к 1.
boost::recursive_mutex mtx;
void Foo()
{
boost::lock_guard<boost::recursive_mutex> lock(mtx);
if (...)
{
Foo();
}
}
Документацию можно найти здесь .
Обратите внимание, что Boost определяет несколько различных типов мьютексов. Поскольку ваш пример показывает, что блокировка взята рекурсивно, нам нужно использовать как минимум boost::recursive_mutex
.
Существуют также разные типы замков. В частности, если вам нужна блокировка чтения-записи (чтобы несколько читателей могли удерживать блокировку одновременно, если ни у одного из них нет блокировки), вы можете использовать boost::shared_lock
вместо lock_guard
.