Изменение значений в цикле несколькими потоками

Поддержка
  • Здравствуйте.
    Два потока (и более) проходят код, потом заходят в цикл.
    Цикл при каждом повторе достает строки по порядку из ресурса (с помощью списков).
    Затем поток увеличивает значение в строке (например, +1) и преобразует обратно строку в ресурс.
    Все бы ничего, но иногда бывает, что потоки идут "впритык" т.е второй поток не успевает взять обновленные после первого потока значения, а берет старое значение строки и получается, что значение увеличивается один раз вместо двух. Как можно избежать данную ситуацию?

  • @Zonteak said in Изменение значений в цикле несколькими потоками:

    Здравствуйте.
    Два потока (и более) проходят код, потом заходят в цикл.
    Цикл при каждом повторе достает строки по порядку из ресурса (с помощью списков).
    Затем поток увеличивает значение в строке (например, +1) и преобразует обратно строку в ресурс.
    Все бы ничего, но иногда бывает, что потоки идут "впритык" т.е второй поток не успевает взять обновленные после первого потока значения, а берет старое значение строки и получается, что значение увеличивается один раз вместо двух. Как можно избежать данную ситуацию?

    https://ru.wikipedia.org/wiki/Состояние_гонки

    Думаю в вашем случае проще использовать глобальную переменную вместо ресурса

  • 0 Votes
    1 Posts
    402 Views
  • 0 Votes
    3 Posts
    666 Views
  • 0 Votes
    3 Posts
    679 Views
  • 0 Votes
    2 Posts
    617 Views
  • 0 Votes
    6 Posts
    3956 Views