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

Devostator

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

C#:
lock(Locker.1)
{
 //код
  lock(Locker.2)
{
//код
}

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

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 248
Благодарностей
674
Баллы
113
Допустима ли такая конструкция?

C#:
lock(Locker.1)
{
//код
  lock(Locker.2)
{
//код
}

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

Devostator

Client
Регистрация
17.09.2011
Сообщения
262
Благодарностей
25
Баллы
28

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 248
Благодарностей
674
Баллы
113

Devostator

Client
Регистрация
17.09.2011
Сообщения
262
Благодарностей
25
Баллы
28
А какой смысл? если в первый лок только один поток зайти может
Смысл в том что по отдельности эти локи используются в других шаблонах.

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

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

Поэтому и нужен лок внутри лока.
 

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 773
Благодарностей
1 444
Баллы
113
Вам одного лока хватит с головой. Зашел 1 поток, выполняется какой то код, пока код в локе не выполнится, следующий поток не зайдет. В вашем же случае зашел поток получил строку из одного списка, полюбовался, и положил в другой список, и вышел с лока. Потом следующий поток и так далее. Зачем 100500 локов городить когда одного за глаза хватит. Это касаемо работы одного шаблона.

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

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 248
Благодарностей
674
Баллы
113
Вам одного лока хватит с головой. Зашел 1 поток, выполняется какой то код, пока код в локе не выполнится, следующий поток не зайдет. В вашем же случае зашел поток получил строку из одного списка, полюбовался, и положил в другой список, и вышел с лока. Потом следующий поток и так далее. Зачем 100500 локов городить когда одного за глаза хватит. Это касаемо работы одного шаблона.



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

Devostator

Client
Регистрация
17.09.2011
Сообщения
262
Благодарностей
25
Баллы
28
Это касаемо работы одного шаблона.
Так у меня не 1 шаблон.

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

Но в любом случае спасибо за критику, не помешает.
 

Devostator

Client
Регистрация
17.09.2011
Сообщения
262
Благодарностей
25
Баллы
28
Тут уже нужна глобальная переменная со значением true, false если свободно то true, а если занято то false.
Я пробовал, мне не понравилось, слишком много лишних блоков, забываю названия переменных, которые используются в нескольких шаблонах, как-то слишком ненаглядно. Проверь, установи, потом снова проверь, настрой логику на все варианты.. слишком много всего.
 

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