Для моего кросс-платформенного приложения я начал использовать Boost, но я не могу понять, как я могу реализовать код для воспроизведения поведения критического раздела Win32 или .Net lock
.
Я хочу написать метод Foo
, который можно вызывать из разных потоков для управления операциями записи в общие поля. Рекурсивные вызовы внутри одного потока должны быть разрешены (Foo() → Foo()).
В С# эта реализация очень проста:
object _synch = new object();
void Foo()
{
lock (_synch) // one thread can't be lock by him self, but another threads must wait untill
{
// do some works
if (...)
{
Foo();
}
}
}