@Shabjdeed лучше со списком работать, как по мне.
Многопоточность
-
Есть вот такой вот проект:

Вот лог:
[942612856] [01:00:39] Поток №1 : 2
[942612856] [01:00:39] Поток №2 : 2
[942612856] [01:00:39] Поток №3 : 2
[942612856] [01:00:39] Поток №4 : 2
[942612856] [01:00:39] Поток №5 : 2
[942612856] [01:00:42] Поток №1 : 3
[942612856] [01:00:42] Поток №2 : 3
[942612856] [01:00:42] Поток №3 : 3
[942612856] [01:00:42] Поток №4 : 3
[942612856] [01:00:42] Поток №5 : 3
[942612856] [01:00:45] Поток №1 : 4
[942612856] [01:00:45] Поток №2 : 4
[942612856] [01:00:45] Поток №3 : 4
[942612856] [01:00:45] Поток №4 : 4
[942612856] [01:00:45] Поток №5 : 4Как мне сделать, чтобы потоки выводили числа по порядку?
-
@gr34ka said in Многопоточность:
Есть вот такой вот проект:
Вот лог:
[942612856] [01:00:39] Поток №1 : 2
[942612856] [01:00:39] Поток №2 : 2
[942612856] [01:00:39] Поток №3 : 2
[942612856] [01:00:39] Поток №4 : 2
[942612856] [01:00:39] Поток №5 : 2
[942612856] [01:00:42] Поток №1 : 3
[942612856] [01:00:42] Поток №2 : 3
[942612856] [01:00:42] Поток №3 : 3
[942612856] [01:00:42] Поток №4 : 3
[942612856] [01:00:42] Поток №5 : 3
[942612856] [01:00:45] Поток №1 : 4
[942612856] [01:00:45] Поток №2 : 4
[942612856] [01:00:45] Поток №3 : 4
[942612856] [01:00:45] Поток №4 : 4
[942612856] [01:00:45] Поток №5 : 4Как мне сделать, чтобы потоки выводили числа по порядку?
Используйте ресурсы
-
Глобальная переменная ? не а ?
Ну то есть можно сделать глобальную переменную, а в потоках ее увеличивать и выводить например. Запуск потоков лучше сделать с небольшой задержкой.
Получаем номер потока и кратно увеличиваем задержку.
Но скорее всего все равно собьется, так как время выполнения каждого потока изменится. -
@Fox said in Многопоточность:
Используйте ресурсы
Ресурсы гарантируют атомарность операций? Но даже если они это и гарантируют и в каждом потоке выводится в лог переменная, не факт, что потоки будут ее выводить в том же порядке, что и взяли данные из ресурса. Или я не прав?
-
@sergerdn said in Многопоточность:
@Fox said in Многопоточность:
Используйте ресурсы
Ресурсы гарантируют атомарность операций? Но даже если они это и гарантируют и в каждом потоке выводится в лог переменная, не факт, что потоки будут ее выводить в том же порядке, что и взяли данные из ресурса. Или я не прав?
ресурсы это по сути просто объект в глобальной видимости с блокировкой на время использования, в нём есть параметры успехных и неуспешных использований, времени повторного использования и т.д.
-
@Fox said in Многопоточность:
@sergerdn said in Многопоточность:
@Fox said in Многопоточность:
Используйте ресурсы
Ресурсы гарантируют атомарность операций? Но даже если они это и гарантируют и в каждом потоке выводится в лог переменная, не факт, что потоки будут ее выводить в том же порядке, что и взяли данные из ресурса. Или я не прав?
ресурсы это по сути просто объект в глобальной видимости с блокировкой на время использования, в нём есть параметры успехных и неуспешных использований, времени повторного использования и т.д.
Ясно, гарантируют. Но каждый поток же не будет гарантированно выводить данные из ресурса в лог, в том же порядке, что потоки взяли? Особенно после sleep?
P.S.
Вопрос основан на том, что sleep в Javascript гарантирует, что будет "бездействие" в течении минимум определенного времени. То есть если спать три секунды - можно проспать и сильно больше(можно и пять), но точнее не менее трех. Или я ошибаюсь?P.P.S.
Я думаю, что задача топикастера невыполнима простым способом - выводить данные в лог в том же порядке, в котором потоки их получили без каких-то костылей с синхронизацией. -
@sergerdn said in Многопоточность:
Ясно, гарантируют. Но каждый поток же не будет гарантированно выводить данные из ресурса в лог, в том же порядке, что потоки взяли? Особенно после sleep?
Эмм.. разумеется нет, иначе это было бы некорректная работа кода
Вопрос основан на том, что sleep в Javascript гарантирует, что будет "бездействие" в течении минимум определенного времени. То есть если спать три секунды - можно проспать и сильно больше(можно и пять), но точнее не менее трех. Или я ошибаюсь?
BAS проверяет время сна раз в 10 или в 100мс, так что пять секунд вместо трёх проспать точно не получится
Я думаю, что задача топикастера невыполнима простым способом - выводить данные в лог в том же порядке, в котором потоки их получили без каких-то костылей с синхронизацией.
если между взятием данных из ресурса и выводом их в лог не будет каких нибудь действий, которые могут иметь разное время работы для разных потоков (например "Загрузить" или "Спать" со случайным временем) то выводится в лог данные будут в точно таком же порядке, в каком были взяты.
Я если честно, не понимаю к чему вообще обсуждение этого коня в вакууме. Топикастеру лучше описать изначальную задачу, которую он хочет решить именно способом вывода в лог данных в строгой очереди
-
Не понимаю, как можно решить задачу ресурсами.
Есть действие "Случайная строка" 1234 по 4 и действие "Лог", которое выводит полученные цифры. Как решить задачу:
Если число ранее выводилось в лог, необходимо перегенерировать его и если его не было в логе вывести