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

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

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

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

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

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

  • 0 Votes
    6 Posts
    883 Views
  • 0 Votes
    3 Posts
    539 Views
  • 0 Votes
    2 Posts
    674 Views
  • 0 Votes
    3 Posts
    743 Views
  • 0 Votes
    13 Posts
    4618 Views