Решает ли GIL в Python проблему соревнования потоков
Python
Middle
Т-Банк
Решает ли GIL в Python проблему соревнования потоков
Ответы
GIL (Global Interpreter Lock) в Python предотвращает одновременное выполнение байт-кода несколькими потоками, но не решает все проблемы конкурентности.
**Проблемы, которые остаются:**
- **Race conditions**: если потоки работают с общими данными, возможны конфликты даже с GIL.
- **Deadlocks**: взаимные блокировки потоков из-за неправильного порядка захвата ресурсов.
**Пример:**
```
import threading
counter = 0
def increment():
global counter
for _ in range(100000):
counter += 1 # Неатомарная операция!
threads = [threading.Thread(target=increment) for _ in range(10)]
for t in threads:
t.start()
for t in threads:
t.join()
print(counter) # Результат может быть меньше 1_000_000!
```
**Решение:**
Использовать `threading.Lock`, `multiprocessing` или асинхронность (`asyncio`).