Можно ли делать lock внутри другого lock?

  • Автор темы Автор темы Devostator
  • Дата начала Дата начала

Devostator

Client
Регистрация
17.09.2011
Сообщения
289
Реакции
34
Баллы
28
Допустима ли такая конструкция?

C#:
Развернуть Свернуть Копировать
lock(Locker.1)
{
 //код
  lock(Locker.2)
{
//код
}

}

p.s. Мне нужно залочить 2 разных списка привязанных к двум разным файлам. Эти файлы используются и лочатся в других шаблонах.
 
Допустима ли такая конструкция?

C#:
Развернуть Свернуть Копировать
lock(Locker.1)
{
//код
  lock(Locker.2)
{
//код
}

}

p.s. Мне нужно залочить 2 разных списка привязанных к двум разным файлам. Эти файлы используются и лочатся в других шаблонах.
А какой смысл? если в первый лок только один поток зайти может
 
А какой смысл? если в первый лок только один поток зайти может

Смысл в том что по отдельности эти локи используются в других шаблонах.

Я почитал маны по паблик коду. С помощью него лочится отдельный объект: список привязанный к конкретному файлу. То есть мы по сути лочим файл для всех шаблонов внутри одной зенки.

В момент этой операции мне нужно лочить два файла сразу и из которого пишу, и в который пишу. Чтобы другие шаблоны не вмешались.

Поэтому и нужен лок внутри лока.
 
Вам одного лока хватит с головой. Зашел 1 поток, выполняется какой то код, пока код в локе не выполнится, следующий поток не зайдет. В вашем же случае зашел поток получил строку из одного списка, полюбовался, и положил в другой список, и вышел с лока. Потом следующий поток и так далее. Зачем 100500 локов городить когда одного за глаза хватит. Это касаемо работы одного шаблона.

Чтобы другие шаблоны не вмешались.

Тут уже нужна глобальная переменная со значением true, false если свободно то true, а если занято то false.
Ну и опять же как то не по феншую 100500 разных шаблонов будут ждать пока выполнится код с локом в каком то одном из шаблонов.
Советую пересмотреть логику ваших шаблонов относительно списка.
 
Вам одного лока хватит с головой. Зашел 1 поток, выполняется какой то код, пока код в локе не выполнится, следующий поток не зайдет. В вашем же случае зашел поток получил строку из одного списка, полюбовался, и положил в другой список, и вышел с лока. Потом следующий поток и так далее. Зачем 100500 локов городить когда одного за глаза хватит. Это касаемо работы одного шаблона.



Тут уже нужна глобальная переменная со значением true, false если свободно то true, а если занято то false.
Ну и опять же как то не по феншую 100500 разных шаблонов будут ждать пока выполнится код с локом в каком то одном из шаблонов.
Советую пересмотреть логику ваших шаблонов относительно списка.
Вы видимо начало темы не почитали, людям похуй они хотят 2 лока)
 
Это касаемо работы одного шаблона.

Так у меня не 1 шаблон.

Ну и опять же как то не по феншую 100500 разных шаблонов будут ждать пока выполнится код с локом в каком то одном из шаблонов.
Советую пересмотреть логику ваших шаблонов относительно списка.

С логикой все отлично, я переношу пачкой. Накопление данных занимает минут 50, перенос 1 секунду в локе. Ничего страшного не происходит. Ну и как я написал выше, лочатся файлы (через лок листа привязанного к файлу), а не совсем то что вы пишете.

Но в любом случае спасибо за критику, не помешает.
 
Тут уже нужна глобальная переменная со значением true, false если свободно то true, а если занято то false.

Я пробовал, мне не понравилось, слишком много лишних блоков, забываю названия переменных, которые используются в нескольких шаблонах, как-то слишком ненаглядно. Проверь, установи, потом снова проверь, настрой логику на все варианты.. слишком много всего.
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)