Для своего кроссплатформенного приложения я начал использовать Boost, но не могу понять, как я могу реализовать код для воспроизведения поведения критической секции Win32 или блокировки .Net
.
Я хочу написать метод Foo
, который можно было бы вызывать из разных потоков для управления операциями записи в общие поля. Рекурсивные вызовы внутри одного и того же потока должны быть разрешены (Foo () -> Foo ()).
В C # эта реализация очень проста:
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();
}
}
}