Sobes.tech
Junior — Middle

Можете ли да обясните какво е семафор в контекста на програмирането и синхронизацията на нишки?

sobes.tech AI

Отговор от AI

Семафорът е механизъм за синхронизация, който се използва за управление на достъпа на множество нишки до споделен ресурс.

Той съдържа брояч, който показва колко нишки могат едновременно да имат достъп до ресурса. Когато нишка иска да влезе в критичната секция, тя се опитва да "засече" семафора:

  • Ако броячът е по-голям от нула, той се намалява с едно и нишката продължава.
  • Ако броячът е нула, нишката се блокира и чака другата нишка да освободи семафора.

Когато нишка приключи работата с ресурса, тя освобождава семафора, увеличавайки брояча, което позволява на други нишки да продължат.

Пример за използване на семафор в Swift (iOS):

let semaphore = DispatchSemaphore(value: 2) // разрешаваме 2 нишки едновременно

DispatchQueue.global().async {
    semaphore.wait() // опитва се да засече семафора
    print("Нишката започна работа")
    sleep(2) // имитация на работа
    print("Нишката приключи работа")
    semaphore.signal() // освобождава семафора
}

По този начин, семафорът помага да се контролира броят на работещите нишки с общ ресурс, предотвратява състезателни условия и осигурява коректна работа.