глобальная переменка

Gizmond

Client
Регистрация
18.02.2017
Сообщения
178
Благодарностей
30
Баллы
28
Ребят , как сделать чтобы выполнялось действие, когда счетчик глобальной переменной достигает определенного значения.
Пример:
Когда глобальная переменка достигает значения 20 ( создаем файлик ) , и так каждый раз через 20 шагов : 20 ... 40 ... 60 ... 80 -) Надеюсь доступно разъяснил
 

Gizmond

Client
Регистрация
18.02.2017
Сообщения
178
Благодарностей
30
Баллы
28
Мало данных.
1 поток прибавляет +1, а другие потоки ждут или как?
если честно с глобалкой первый раз работать буду , сейчас смотрел форум нашел пару сниппетов. Времени затестить пока не было.

Вообще как я вижу картинку , к примеру работает 5 потоков. В середине шаблона идет проверка на глобалку и тут загвоздка , получается если пару потоков в одно и тоже время будут проверять значение глобальной и если оно окажется равное 20 , то пойдет выполнение действия . А мне нужно чтобы действие выполнялось одним потоком. Я даже не знаю как все это реализовать чтобы нормально работало D:
 

doc

Client
Регистрация
30.03.2012
Сообщения
7 956
Благодарностей
4 049
Баллы
113
для блока IF строка
{переменная} % 20 == 0
 
  • Спасибо
Реакции: Gizmond

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
11 174
Благодарностей
4 135
Баллы
113
получается если пару потоков в одно и тоже время будут проверять значение глобальной и если оно окажется равное 20 , то пойдет выполнение действия
Каждый поток прибавляет +1 к глобалке и в это же время проверяет на логику и все это в локе. И теоретически должно работать.
 

Gizmond

Client
Регистрация
18.02.2017
Сообщения
178
Благодарностей
30
Баллы
28
для блока IF строка
{переменная} % 20 == 0
даже не знал что так просто проверка делается Оо

а какие костыли можно придумать , если проверка идет одновременно 2 потоками к примеру из 5 ? Т.е 2 потока пойдут по True , а мне нужно чтобы один)
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
11 174
Благодарностей
4 135
Баллы
113

Gizmond

Client
Регистрация
18.02.2017
Сообщения
178
Благодарностей
30
Баллы
28
Каждый поток прибавляет +1 к глобалке и в это же время проверяет на логику и все это в локе. И теоретически должно работать.
у меня по логике , прибавка глобалки в самом конце шаблона
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
11 174
Благодарностей
4 135
Баллы
113

TwistDanceR

Активный пользователь
Регистрация
30.05.2019
Сообщения
471
Благодарностей
188
Баллы
43
А что в if есть деление? можешь по подробнее рассказать или где почитать про это?
Это не деление, а получение целочисленного остатка.
В первых уроках про C# есть, точно говорю ) 1 глава - переменные, 2я - арифметические действия)
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
11 174
Благодарностей
4 135
Баллы
113
Это не деление, а получение целочисленного остатка.
В первых уроках про C# есть, точно говорю ) 1 глава - переменные, 2я - арифметические действия)
Эта конструкция поймет 20, 40, 480?
И всем выдаст True?
 

Gizmond

Client
Регистрация
18.02.2017
Сообщения
178
Благодарностей
30
Баллы
28
Чтобы не создавать новую тему , напишу тут.

Вообщем, есть список и нужно делать манипуляции с ним в много потоке, но так же нужно проверить глобальную переменную и на основании нее нужно присвоить значение переменной.
Т.е логика будет следующая.

Проверяем глобальную переменную , если она равна к примеру 5 , то записываем в переменную значение true(если значение глобальной переменной 5), если любое другое значение (false). Далее на основании значения переменной (true или false) идет обработка списка.

Так вот вопрос. Как сделать это в много потоке? Если весь код засунуть под lock(SyncObjects.ListSyncer) , будут ли другие потоки ждать проверки глобальной переменной и записи значения в переменную или же это будет работать только когда происходит работа со списком?

Так же видел lock(SyncObject) такой метод. Если под него засунуть проверку + запись в переменку и в нем же уже засунуть lock(SyncObjects.ListSyncer) и работать со списком, так выйдет?

@doc =)
 

doc

Client
Регистрация
30.03.2012
Сообщения
7 956
Благодарностей
4 049
Баллы
113
Чтобы не создавать новую тему , напишу тут.

Вообщем, есть список и нужно делать манипуляции с ним в много потоке, но так же нужно проверить глобальную переменную и на основании нее нужно присвоить значение переменной.
Т.е логика будет следующая.

Проверяем глобальную переменную , если она равна к примеру 5 , то записываем в переменную значение true(если значение глобальной переменной 5), если любое другое значение (false). Далее на основании значения переменной (true или false) идет обработка списка.

Так вот вопрос. Как сделать это в много потоке? Если весь код засунуть под lock(SyncObjects.ListSyncer) , будут ли другие потоки ждать проверки глобальной переменной и записи значения в переменную или же это будет работать только когда происходит работа со списком?

Так же видел lock(SyncObject) такой метод. Если под него засунуть проверку + запись в переменку и в нем же уже засунуть lock(SyncObjects.ListSyncer) и работать со списком, так выйдет?

@doc =)
засовывай всё под один lock(SyncObjects.ListSyncer)
только если там нет никаких долгих действий, иначе аукнется всем шаблонам
 
  • Спасибо
Реакции: Gizmond

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