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, несмотря на однопоточный цикл событий?
Без регистрации · результат не сохраняется
Связанные задачи
- Asyncio Queue и Semaphore: конвейер с ограничением нагрузки
- Asyncio Queue: вытеснение старейшей заявки без блокировки поставщика
- Asyncio Lock и Semaphore: учёт результатов обработки контейнеров
- Asyncio: восстановление пула воркеров после ошибки
- Asyncio Queue: объединение парных событий по идентификатору
- Asyncio: две очереди с приоритетом и общим семафором
