Проверяет понимание проблемы race condition в многопоточном программировании и способов её предотвращения.
Race condition (состояние гонки) — это дефект в многопоточной или асинхронной программе, когда поведение системы зависит от непредсказуемого порядка выполнения потоков. Это происходит, когда два или более потока одновременно обращаются к общим данным, и хотя бы один из них выполняет запись, без должной синхронизации.
Рассмотрим простой счетчик, который увеличивается двумя асинхронными операциями:
let counter = 0;
async function increment() {
let temp = counter;
await new Promise(r => setTimeout(r, 100));
counter = temp + 1;
}
await Promise.all([increment(), increment()]);
console.log(counter); // Может быть 1, а не 2Оба потока читают counter как 0, затем оба записывают 1. Ожидаемый результат 2 не достигается.
Race condition — одна из самых коварных ошибок в параллельном программировании. Её сложно отловить, так как она проявляется нестабильно. Всегда синхронизируйте доступ к общим ресурсам, особенно в высоконагруженных системах.