Race condition в asyncio: почему однопоточность не защищает счётчик

Выберите ответ и проверьте себя на странице.

Другие упражнения по этой теме: Asyncio Queue, Lock и Semaphore: задачи на очереди и воркеров.

Дана разделяемая переменная counter = 0 и корутина:

async def worker():
    global counter
    val = counter
    await asyncio.sleep(0.001)
    counter = val + 1

Пятьдесят таких корутин запущены конкурентно через TaskGroup. Почему значение counter в итоге окажется меньше 50, несмотря на однопоточный цикл событий?

Выберите один вариант
Без регистрации · результат не сохраняется

Связанные задачи