Счётчик и потоки цикла

Поддержка
  • Есть однопоточный цикл, который берёт новость из файла и чебурашет её на переменные.

    Дальше он создаёт переменную [[SCHETCHIK]] (Счётчик) со значением 1.

    Дальше он запускает второй цикл в 10 потоков.

    Второй цикл первым делом берёт значение счётчика и кладёт в свою переменную [[NOMER]].

    После чего увеличивает [[SCHETCHIK]] на единицу и пошёл дальше отправлять новость на сайты.

    Вот чего я боюсь: Что 10 потоков возмут себе единицу в свою переменную [[NOMER]], после чего каждый увеличит счётчик на единицу (итого на 10) и на следующем заходе то же самое произойдёт с числом 11...

    Как избежать такой вероятности?

  • @LCFSCS said in Счётчик и потоки цикла:

    Есть однопоточный цикл, который берёт новость из файла и чебурашет её на переменные.

    Дальше он создаёт переменную [[SCHETCHIK]] (Счётчик) со значением 1.

    Дальше он запускает второй цикл в 10 потоков.

    Второй цикл первым делом берёт значение счётчика и кладёт в свою переменную [[NOMER]].

    После чего увеличивает [[SCHETCHIK]] на единицу и пошёл дальше отправлять новость на сайты.

    Вот чего я боюсь: Что 10 потоков возмут себе единицу в свою переменную [[NOMER]], после чего каждый увеличит счётчик на единицу (итого на 10) и на следующем заходе то же самое произойдёт с числом 11...

    Как избежать такой вероятности?

    Как именно цикл запускает потоки?

  • @Fox
    Планировал второй цикл сделать функцией и вызвать в несколько потоков.

  • @LCFSCS said in Счётчик и потоки цикла:

    @Fox
    Планировал второй цикл сделать функцией и вызвать в несколько потоков.

    Используйте локальный ресурс или список в глобальной переменной

  • @Fox

    Что-то я ничего не понимаю...

    Локальный ресурс - добавлять можно только строки - не получится туда число положить и менять его из каждого потока.
    Список в глобальной переменной - это я вообще не понял как: создать глобальную переменную и вложить в её значение список из ресурса?
    И что со списком делать? - Создавать в нём строки (1,2,3,4,5... - запятые заменяем переносами и так до значения посчитанного колличесва ячеек ексель-файла - а их будет несколько тысячь)?

    А с глобальными переменными не получится? Нельзя сделать как-то, чтобы значение её отдавалось единожды, пока не измениться?

    Думал сделать задержку на "номер потока" секунд - но всё равно сохраняется вероятнось "схватить дубль"...

    Что-то я начитался (пол дня читал - искал похожую ситуацию - но не нашёл) и пришёл к очень негативным предположениям:

    Каждый поток (кроме первого) получается "чистым"? - Он "забывает" всё, что было до его "рождения" (загрузку профиля, про все мои 100500 начебурашенных переменных) - может иметь дело только с глобальными переменными и ресурсами?
    Так ли это? Если так - то мне профиль нужно грузить в каждом потоке и нужные переменные переделывать в глобальные?
    Можно ли пересоздавать глобальные переменные (ибо мы создаём их первым циклом) - конфликтов не будет?

    И опять к подходу - реализовать "счётчик для циклов" - пол часа делов и добавить как действие и как опцию для циклов с тремя "вариантами" (использовать один раз или многократно, увеличивать после использования) - годами люди парятся с циклами в многопотоке, пляшут с бубном.

    Полез запускть функцию многопоточно - а она ко мне пристаёт со своими "Удачными" и "Неудачными". - Что ей указывать - ноль, один или мииилон? Кучу роликов просмотрел и нигде не объясняют что это, как работает и что с ним делать - ограничиваются тем, что "Я это потом объсню" (и не объяснил), "А я люблю ставить девять девяток (десять десяток)"...
    Как это вообще работает? Я не знаю сколько будет оборотов цикла в каждом потоке. Как повлияют эти цифры на многопоточное выполнение цикла - дойдёт до установленной цифры и прекратит (не доделав до конца), или выполнит цикл (но так как цифры не достиг) и опять его запустит, или эти цифры "ни на что не влияют"?

  • 0 Votes
    9 Posts
    735 Views
  • Capmonster и BAS

    Поддержка
    0 Votes
    2 Posts
    737 Views
  • 0 Votes
    2 Posts
    710 Views
  • 0 Votes
    15 Posts
    3271 Views
  • 0 Votes
    6 Posts
    3320 Views