Sobes.tech
Назад к вопросам
Middle
4

Что произойдёт, если два потока одновременно прибавляют значения к переменной без примитивов синхронизации? Какие могут быть результаты?

Компании, где спрашивали
ИТ Инополис

Ответ от нейросети

sobes.tech AI

Если два потока одновременно прибавляют значение к общей переменной без использования примитивов синхронизации (например, lock, mutex), возникает состояние гонки (race condition). Это значит, что операции чтения и записи могут пересекаться, приводя к некорректным результатам.

Например, если переменная равна 0, и два потока одновременно делают x = x + 1, то оба могут прочитать 0, прибавить 1 и записать 1, хотя правильный итог должен быть 2.

Результаты могут быть:

  • Потеря обновлений (increment не учитывается).
  • Непредсказуемое значение переменной.

Чтобы избежать этого, нужно использовать синхронизацию, например:

int x = 0;
object locker = new object();

void Increment() {
    lock(locker) {
        x = x + 1;
    }
}

Или использовать атомарные операции из System.Threading.Interlocked.