Если там пример с локом обьекта, то работает нормально на сколько я помню.запустил проект rostonix, нормально работает, если в настройках постера количество потоков в одном процессе поставлено на 1. Если больше, то начинаются глюки. Пожалуйста добавьте в настройки постера возможность поставить паузу между инициализациями потоков.
Все верно, я пока понимал в чем суть, хотя я тогда первый раз с потоками столкнулся, это было чесно говоря не много сложно из за недопонимания самого процесса их работы, но когда ты понимаеш как они работают, проблема исчезает, своего рода, называется прирурчить потокиинтересная у вас тут тема развелась
я тоже когдато долго вникал в тему ассинхронного кода.
Да, все так и есть, rostonix правильно пишет.
В ассинхронном исполнении кода не должно быть порядка. Там где наступает порядок означает, что возникает очеред в виде стека или списка задач.
Очень удачная анология про метро: многопоток это люди только спускающеся в в метро, стремящиеся к турникету, а список задач это люди уже в очереди к турнекету. Даже если им выдать по номерку но пустить в метро всех сразу, то в итоге все равно очередь будет не упорядочена. Чтобы очередь была полностью упорядоченна, нужно дождаться последнего человека и только тогда упорядочивать.
То есть проблема порядка в определенной части логического процесса решается ожиданием определенного сигнала, который означает что все все процессы стали в очередь.
Только после того как все процессы находятся в одинаковом состоянии образуется типа упорядочивания и перевод их в однопоточный режим до тех пор пока все процессы не пройдут этот тонкий мостик синхронности.
Все это можно сделать с помощью глобальных переменных и ожидания.
1 счетчик процессов для многпоточной части - уже есть.
1 итератор процессов для однопоточной части - похож на первый, но назначение и логика работы другая.
Ну я приручал потоки приручая себя понять их логику так как изначально я не имел представление как они работают, хотя имел, думая что они все идут поочередно а не в разброс в итоге моя логика построение логических действий была ошибочна и приводила к отрицательным результатам по всему времени работы над созданием каких либо проэктов. Но когда ты понимаеш как они работаю, все становится ясным, но был еще один недостаток в знаний, это язык C#, я с ним раньше не сталкивался, ну он не такой тяжелый, рекомендуется знать хотя бы на базовом уровне.нет, это называется, не приручить потоки, а приручить себя: понять логику работы программ..
вроде работает - но начинает не с 0 или 1Вот финальный итоговый пример
http://zennolab.com/discussion/threads/mnogopotok-prostoj-primer.15888/page-2#post-97413
После 2 запуска снипет не работает. Приходится закрывать зенку, что бы обнулить Глобальную переменную. Можно ли ее иным образом обнулить?вот пример поправленный
анализируйте логигу шаблона. после смены глобальной переменной мы ее значение кидаем в локальную переменную и в проекте используем уже ее, если она нужна
lock(SyncObject) {
try {
var gbVar = project.GlobalVariables["[email protected]", "globVar1"];
// перейти к неудачному выходу, если он уже инициализирован
return null;
} catch (KeyNotFoundException ex) {
int defaultValue = 1;
project.GlobalVariables.SetVariable("[email protected]", "globVar1", defaultValue);
project.Variables["currentValue"].Value = defaultValue.ToString();
// перейти к хорошему выходу, если мы инициализированы
return "ok";
}
}
lock(SyncObject) {
var gbVar = project.GlobalVariables["[email protected]", "globVar1"];
gbVar.Value = Convert.ToInt32(gbVar.Value.ToString())+1;
project.Variables["currentValue"].Value = gbVar.Value.ToString();
}
После 2 запуска снипет не работает. Приходится закрывать зенку, что бы обнулить Глобальную переменную. Можно ли ее иным образом обнулить?
можно break по условию использовать и все потоки остановятсяПодскажите пожалуйста, как обнулить переменную в многопотоке один раз и чтобы другие потоки не пошли по новому кругу ( так как переменная обнулена)
Я понимаю, что нужно обнулить переменную и чтобы первый поток который добрался до обнуления ждал в локе, а потом туда доедут все другие потоки и шаблон заканчивал работу
А можно пример?можно break по условию использовать и все потоки остановятся