Sobes.tech
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

Такой подход предотвращает одновременное изменение переменной несколькими потоками, что могло бы привести к ошибкам.