C# оператор lock

kataich

Использую оператор lock для синхронизации потоков в приложении.
Не могу найти в интернете, удерживается ли lock, если в критической секции стоит вызов функции.
Почему-то работает такая конструкция, хотя lock берется и в functionA и в functionC. Помогите, пожалуйста, разобраться.

class Test
{
private Object _mutex;
private int a;

public Test
{
_mutex = new Object;
}

protected void functionA
{
lock(_mutex)
{
functionB;
}
}

protected void functionB
{
functionC;
}

protected void functionC
{
lock(_mutex)
{
a ++;
}
}

Dasar

Не могу найти в интернете, удерживается ли lock, если в критической секции стоит вызов функции.
конечно, удерживается

kataich

А если "включить телепата", то почему может работаеть моя конструкция?
Или тред может делать повторный lock?

zorin29


lock ensures that one thread does not enter a critical section while another thread is in the critical section of code. If another thread attempts to enter a locked code, it will wait (block) until the object is released.
То есть один поток может сколько угодно раз делать lock одного ресурса.

kataich

Darkgray, , спасибо!
Оставить комментарий
Имя или ник:
Комментарий: