Sobes.tech
Middle

Wat gebeurt er als twee threads gelijktijdig waarden toevoegen aan een variabele zonder primitieve synchronisatie? Wat kunnen de resultaten zijn?

sobes.tech AI

Antwoord van 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.