[C#] Вопрос по локеру

surrealmix

Client
Регистрация
07.03.2013
Сообщения
715
Благодарностей
409
Баллы
63
Код:
lock(SyncObject)
{

}
Подскажите пожалуйста, этим локером можно лочить любой блок кода в экшене "Свой код C#" чтобы он стабильно работал в многопотоке или этот локер создан специально для работы только с объектами зенно (глобальными переменными)?
 

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
791
Баллы
113
скорей всего первое.
но с глобальными переменными вопрос сложный.
с нереализованой переменной дела плохи и стабильно в начале запуска все потоки пыютаются ее реализовать и это очень плохо.
с реализованой тоже непорядок. проверка по начальному значению также работает как с реализацией. допустим, запустил 5 потоков и все они определяют переменную с начальным значением. Правильная логика с потоками должна быть такой что после разлочки обьекта все переменные должны быть иницализированы или поменять значение, но этого не произходит.
лучшим вариантом для себя я считаю завести залинкованый список или таблицу и хранить данные там как будто это глобальные переменные. Блок лочить нужно полюбому.
 
  • Спасибо
Реакции: surrealmix

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113

Erini

Client
Регистрация
19.03.2015
Сообщения
4
Благодарностей
2
Баллы
3
Тоже появились вопросы по работе с lock:
1. SyncObjects.ListSyncer и SyncObjects.TableSyncer блокируют все таблицы и списки прокета или только те, которые упоминаются внутри них?
2. Если внутри одного кубика нужно локнуть и таблицы и списки, как правильно записать код? Вот так?:
Код:
lock(SyncObjects.ListSyncer){
    lock(SyncObjects.TableSyncer){
        /*
        тут код
        */
    }
}
3.Все-таки, когда нужно использовать lock(SyncObject)?
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
1) все
2) зачем такой огород? лочте отдельно
3) когда вы не хотите чтобы данные в многопотоке путались у вас.
 
  • Спасибо
Реакции: Erini

Erini

Client
Регистрация
19.03.2015
Сообщения
4
Благодарностей
2
Баллы
3
Получается этим lock(SyncObject) как раз можно заблокировать и таблицы и списки одновременно? Локать отдельно не получается, так как нужно взять строку из списка и сразу перебросить ее в ячейку таблицы, пока другие потоки не вмешались.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
ну можно и так в принципе
 
  • Спасибо
Реакции: Erini

catol

Client
Регистрация
05.07.2012
Сообщения
278
Благодарностей
98
Баллы
28
lock(SyncObject)

Локаются все действия в только одном проекте.

Как мне локать работу параллельно работающих проектах в ZennoPoster?
 

surrealmix

Client
Регистрация
07.03.2013
Сообщения
715
Благодарностей
409
Баллы
63

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