Приложение сетевое много поточное 10 потоков.
В основном потоки работают с одними и теме же массивами данных.
Массивы содержат свои массивы.
К сожалению протестировать нет возможности необходимо большое количество подключенных клиентов активно посылающие запросы.
И так у меня возник вопрос если, я заблокировал Родительский ArrayList(ПАПА) в кортом хранится Свой тип данных в котором есть Свой ArrayList(РЕБЕНОК) и мне его надо модифицировать из другого потока который блокирует cildren
Monitor::Enter(clientList->SyncRoot);папа
Monitor::Enter(clientList->orders->SyncRoot);ребенок
Будет ли ребенок жать пока папочка освободится?
Если ребенок первый был занят то тогда ждет ли его отец?
Или блокировка влияет только на конечное содержимое массива?
уф.. надеюсь правильно объяснил.
Здравствуйте, Max1983, Вы писали:
M>Будет ли ребенок жать пока папочка освободится?
M>Если ребенок первый был занят то тогда ждет ли его отец?
M>Или блокировка влияет только на конечное содержимое массива?
Вы слишком многого ожидаете от Monitor-а.
Его задаче — заморозить текущий поток, если какой-либо другой поток уже сделал Monitor.Enter ранее и еще не освободил его. Ничего о внутренней структуре данных он не знает.
Здравствуйте, Max1983, Вы писали:
M>Спасибо разобрался..
M>Вроде как...
M>Вызов
M>Monitor::Enter(clientList->SyncRoot);
M>Заставит "зависнуть" другому потоку который вызовет Monitor::Enter(clientList->SyncRoot);
M>пока поток 1 не даст Monitor::EXIT(clientList->SyncRoot);
Разобрался?! Да это черным по белому в документации написано, в чем тут было разбираться?