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