Back to questions
Junior — Middle
57
Ты знаком с концепциями и методами обработки данных или задач в условиях конкуренции между потоками или процессами?
Answer from AI
sobes.tech AI
В условиях конкуренции между потоками или процессами важна синхронизация доступа к общим ресурсам, чтобы избежать состояний гонки и обеспечить корректность данных. В Python для этого используются различные механизмы:
- Lock (блокировка) — простой механизм, который позволяет одному потоку захватить ресурс, пока другие ждут.
- RLock (рекурсивный лок) — позволяет одному потоку многократно захватывать один и тот же лок.
- Semaphore (семафор) — ограничивает количество потоков, которые могут одновременно получить доступ к ресурсу.
- Event (событие) — для уведомления потоков о наступлении какого-то события.
- Queue (очередь) — потокобезопасная структура данных для обмена информацией между потоками.
Пример использования Lock:
import threading
counter = 0
lock = threading.Lock()
def increment():
global counter
with lock:
temp = counter
temp += 1
counter = temp
threads = [threading.Thread(target=increment) for _ in range(1000)]
for t in threads:
t.start()
for t in threads:
t.join()
print(counter) # Ожидается 1000
Такой подход предотвращает одновременное изменение переменной несколькими потоками, что могло бы привести к ошибкам.