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

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

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

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

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

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

  • 0 Votes
    4 Posts
    1147 Views
  • 0 Votes
    2 Posts
    690 Views
  • 0 Votes
    2 Posts
    1003 Views
  • 0 Votes
    8 Posts
    2332 Views
  • 0 Votes
    13 Posts
    4936 Views