Sobes.tech
Junior — Middle
68

Какими способами осуществлять синхронизацию потоков в многопоточном программировании?

Answer from AI

sobes.tech AI

В Python для синхронизации потоков используются различные механизмы из модуля threading:

  • Lock (мьютекс) — простой механизм блокировки, который позволяет одному потоку захватить ресурс, а другим ждать освобождения.
  • RLock (рекурсивный мьютекс) — позволяет одному потоку несколько раз захватывать одну и ту же блокировку.
  • Semaphore (семафор) — ограничивает количество потоков, которые могут одновременно получить доступ к ресурсу.
  • Event (событие) — позволяет одному потоку сигнализировать другим о наступлении какого-то события.
  • Condition (условие) — более сложный механизм, позволяющий потокам ждать определённого условия.

Пример использования Lock:

import threading

lock = threading.Lock()
shared_resource = 0

def thread_function():
    global shared_resource
    with lock:
        # Критическая секция
        shared_resource += 1

threads = [threading.Thread(target=thread_function) for _ in range(10)]
for t in threads:
    t.start()
for t in threads:
    t.join()

print(shared_resource)  # Ожидается 10