Назад к вопросам
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.