Sobes.tech
Middle

Was passiert, wenn zwei Threads gleichzeitig Werte an eine Variable ohne Synchronisationsprimitive erhöhen? Was könnten die Ergebnisse sein?

sobes.tech KI

Antwort von 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.