Sobes.tech
Junior — Middle

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

sobes.tech AI

Отговор от AI

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

Принцип на работа:

  • Първоначално броячът на семафора се задава на число, равно на наличните ресурси.
  • Когато нишка иска да получи достъп, тя извиква операцията "wait" (или "acquire"), която намалява брояча с 1.
  • Ако броячът стане по-малък от нула, нишката се блокира и чака, докато друга нишка освободи ресурса.
  • Когато нишка освободи ресурса, тя извиква операцията "signal" (или "release"), която увеличава брояча с 1 и отключва чакащите нишки.

Пример в Swift с използване на DispatchSemaphore:

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

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

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