Общая ли память у потоков в Python
Python
Middle
Т-Банк
Общая ли память у потоков в Python
Ответы
В Python потоки (threads) работают в рамках одного процесса и имеют общую память. Это означает, что все потоки могут обращаться к одним и тем же глобальным переменным и изменять их. Однако из-за GIL (Global Interpreter Lock) только один поток может выполнять Python-код в любой момент времени, что может привести к проблемам с конкурентным доступом.
Пример:
```
import threading
counter = 0
def increment():
global counter
for _ in range(100000):
counter += 1
threads = []
for _ in range(5):
t = threading.Thread(target=increment)
threads.append(t)
t.start()
for t in threads:
t.join()
print(counter) # Может быть меньше 500000 из-за race condition
```
Для безопасного доступа к общей памяти используйте механизмы синхронизации:
```
lock = threading.Lock()
def safe_increment():
global counter
for _ in range(100000):
with lock:
counter += 1
```