Monitor::Enter и блокировка данных
От: Max1983 http://koksa.net
Дата: 25.02.11 10:33
Оценка:
Приложение сетевое много поточное 10 потоков.
В основном потоки работают с одними и теме же массивами данных.
Массивы содержат свои массивы.
К сожалению протестировать нет возможности необходимо большое количество подключенных клиентов активно посылающие запросы.

И так у меня возник вопрос если, я заблокировал Родительский ArrayList(ПАПА) в кортом хранится Свой тип данных в котором есть Свой ArrayList(РЕБЕНОК) и мне его надо модифицировать из другого потока который блокирует cildren

Monitor::Enter(clientList->SyncRoot);папа

Monitor::Enter(clientList->orders->SyncRoot);ребенок

Будет ли ребенок жать пока папочка освободится?
Если ребенок первый был занят то тогда ждет ли его отец?
Или блокировка влияет только на конечное содержимое массива?
уф.. надеюсь правильно объяснил.
Re: Monitor::Enter и блокировка данных
От: Lloyd Россия  
Дата: 25.02.11 10:39
Оценка: +1
Здравствуйте, Max1983, Вы писали:

M>Будет ли ребенок жать пока папочка освободится?

M>Если ребенок первый был занят то тогда ждет ли его отец?
M>Или блокировка влияет только на конечное содержимое массива?

Вы слишком многого ожидаете от Monitor-а.
Его задаче — заморозить текущий поток, если какой-либо другой поток уже сделал Monitor.Enter ранее и еще не освободил его. Ничего о внутренней структуре данных он не знает.
Re: Monitor::Enter и блокировка данных
От: Max1983 http://koksa.net
Дата: 27.02.11 14:52
Оценка:
Здравствуйте, Max1983, Вы писали:

Спасибо разобрался..
Вроде как...
Вызов
Monitor::Enter(clientList->SyncRoot);

Заставит "зависнуть" другому потоку который вызовет Monitor::Enter(clientList->SyncRoot);

пока поток 1 не даст Monitor::EXIT(clientList->SyncRoot);
Re[2]: Monitor::Enter и блокировка данных
От: Lloyd Россия  
Дата: 27.02.11 16:55
Оценка: :)
Здравствуйте, Max1983, Вы писали:

M>Спасибо разобрался..

M>Вроде как...
M>Вызов
M>Monitor::Enter(clientList->SyncRoot);

M>Заставит "зависнуть" другому потоку который вызовет Monitor::Enter(clientList->SyncRoot);


M>пока поток 1 не даст Monitor::EXIT(clientList->SyncRoot);


Разобрался?! Да это черным по белому в документации написано, в чем тут было разбираться?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.