Блокировки в C# - создание блокировки по ходу выполнения

MaksimHelp

Client
Регистрация
23.09.2016
Сообщения
197
Благодарностей
6
Баллы
18
Подскажите возможно ли создать блокировку с определенным идентификатором по ходу выполнения шаблона?
Знаю только про стандартный: public static object SyncObject = new object();
 

MaksimHelp

Client
Регистрация
23.09.2016
Сообщения
197
Благодарностей
6
Баллы
18
Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113
Извини может я не вижу чего-то, но там на свой вопрос ответа не увидел...
Эту тему уже читал
в таком случае непонятен вопрос.
в статье расписано как сделать несколько локирующих объектов. вы же писали вот "Знаю только про стандартный: public static object SyncObject = new object(); "
и там же расписано как сделать "блокировку по ходу выполнения".
Получается на все ваши вопросы даны ответы :ce:
 

MaksimHelp

Client
Регистрация
23.09.2016
Сообщения
197
Благодарностей
6
Баллы
18
в таком случае непонятен вопрос.
в статье расписано как сделать несколько локирующих объектов. вы же писали вот "Знаю только про стандартный: public static object SyncObject = new object(); "
и там же расписано как сделать "блокировку по ходу выполнения".
Получается на все ваши вопросы даны ответы :ce:
Подождите, может вы не правильно меня поняли, я имел ввиду чтобы во время выполнения шаблона можно было создать в определенный момент блокировку в using
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113
Подождите, может вы не правильно меня поняли, я имел ввиду чтобы во время выполнения шаблона можно было создать в определенный момент блокировку в using
да я и щас не понял :ce:
как это "создать в определенный момент блокировку в using" ? в смысле надо код создать прямо во время выполнения ? или надо заблокировать таблицу в определенном месте кода ?
может прям по шагам распишете задачу, а то вообще ничего не понятно :-)
 

MaksimHelp

Client
Регистрация
23.09.2016
Сообщения
197
Благодарностей
6
Баллы
18
Да нужно создать новый SyncObject = new object(); в using прямо во время выполнения шаблона, чтоб дальнейший код шел под блокировкой...

У меня тысячи id и мне нужно чтоб каждый id был под своей блокировкой, но не буду же я создавать 1000 блокировок под каждый, по этому хочу чтоб блокировка создавалась и потом удалялась!
 

Dr.Pipetka

Client
Регистрация
12.12.2017
Сообщения
1 239
Благодарностей
806
Баллы
113
В общий код добавляешь словарь:
C#:
public static Dictionary<int, object> locksArr = new Dictionary<int, object>();
Уже в кубиках добавляешь нужное количество локов:
C#:
int id = 123;
CommonCode.locksArr.Add(id, new object());
Ну и где надо лочишь по нужному ид:
C#:
lock (CommonCode.locksArr[123]){
    
    //
}
Вроде должно работать
 
  • Спасибо
Реакции: tanichev и MaksimHelp

MaksimHelp

Client
Регистрация
23.09.2016
Сообщения
197
Благодарностей
6
Баллы
18
В общий код добавляешь словарь:
C#:
public static Dictionary<int, object> locksArr = new Dictionary<int, object>();
Уже в кубиках добавляешь нужное количество локов:
C#:
int id = 123;
CommonCode.locksArr.Add(id, new object());
Ну и где надо лочишь по нужному ид:
C#:
lock (CommonCode.locksArr[123]){
   
    //
}
Вроде должно работать
К сожалению не работает!
public static Dictionary<int, object> locksArr = new Dictionary<int, object>();

после добавления получаем ошибку:
Безымянный.png
 

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
823
Баллы
93
К сожалению не работает!
public static Dictionary<int, object> locksArr = new Dictionary<int, object>();

после добавления получаем ошибку:
Посмотреть вложение 71933
В ошибке же все написано. Поле(переменную) надо добавлять внутрь класса. А добавляется она в namespace, судя по ошибке.

Да нужно создать новый SyncObject = new object(); в using прямо во время выполнения шаблона, чтоб дальнейший код шел под блокировкой...

У меня тысячи id и мне нужно чтоб каждый id был под своей блокировкой, но не буду же я создавать 1000 блокировок под каждый, по этому хочу чтоб блокировка создавалась и потом удалялась!
Не надо создавать тысячи объектов блокировок. Проблема в неправильной постановке задачи и в непонимании как что работает.
 

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