Back to questions
Junior — Middle
64
Каким образом вы реализовывали синхронизацию между потоками с помощью семафоров или их аналогов в различных языках программирования?
Answer from AI
sobes.tech AI
Семафоры используются для управления доступом к общим ресурсам между потоками, ограничивая количество потоков, которые могут одновременно выполнять определённый участок кода.
В Python для этого есть класс Semaphore из модуля threading:
import threading
# Создаём семафор с максимальным числом разрешений 2
sem = threading.Semaphore(2)
def worker(num):
print(f"Поток {num} ожидает семафор")
with sem: # Захватываем семафор
print(f"Поток {num} вошёл в критическую секцию")
# Здесь выполняется работа с общим ресурсом
import time
time.sleep(1)
print(f"Поток {num} вышел из критической секции")
threads = []
for i in range(5):
t = threading.Thread(target=worker, args=(i,))
threads.append(t)
t.start()
for t in threads:
t.join()
В других языках, например в Java, есть класс Semaphore из java.util.concurrent, который работает по аналогичному принципу.
Таким образом, семафоры позволяют контролировать количество одновременно работающих потоков, предотвращая гонки и обеспечивая корректную синхронизацию.