Sobes.tech
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, который работает по аналогичному принципу.

Таким образом, семафоры позволяют контролировать количество одновременно работающих потоков, предотвращая гонки и обеспечивая корректную синхронизацию.