Sobes.tech
Middle

Šta radi sinhronizacija u kontekstu višestrukog izvršavanja?

sobes.tech АИ

Одговор од АИ

Синхронизација у контексту мултитхрединг-а спречава услов трка (race condition) и обезбеђује конзистентан приступ заједничким ресурсима (променљиве, фајлови, мреже) из различитих тхреадова.

Основни механизми синхронизације:

  • Мутекс (Mutex): Узајамно искључење. Само један тхреад може поседовати мутекс и приступити заштићеном ресурсу.
  • Семафор (Semaphore): Ограничава број тхреадова који могу истовремено приступити ресурсу. Ради са бројачем.
  • Лок (Lock): Општи концепт, често коришћен за означавање мутекса или других механизама који потпуно блокирају приступ.
  • Диспач Куе (Dispatch Queue): У Grand Central Dispatch (GCD) редови могу бити серијски (serial) или паралелни (concurrent), обезбеђујући синхронизацију управљањем редоследом и бројем истовремено извршавајућих задатака. Серијски редови гарантују извршавање задатака по један, што inherently обезбеђује синхронизацију за податке којима се приступа само из задатака тог реда.

Принцип рада: Тхреад који жели приступити заједничком ресурсу, најпре покушава да добије блокаду (acquire lock). Ако је ресурс слободан, тхреад добија блокаду и ради са ресурсом. После завршетка рада, тхреад ослобађа блокаду (release lock). Ако је ресурс заузет, други тхреадови се блокирају (чекају) док се ресурс не ослободи.

Пример коришћења мутекса за заштиту критичне секције:

// Пример у Objective-C са коришћењем @synchronized
- (void)updateSharedResource {
    @synchronized (self) { // Блокирање по објекту self
        // Овде се извршава критична секција
        // Доступ до sharedResource је безбедан
        self.sharedResource++;
    } // Блокада се аутоматски уклања при изласку из блока
}
// Пример у Swift-у са коришћењем NSLock
let lock = NSLock()
var sharedCounter = 0

func incrementCounter() {
    lock.lock() // Покушавамо да добијемо блокаду
    // Критична секција
    sharedCounter += 1
    lock.unlock() // Ослобађамо блокаду
}

Синхронизација спречава проблеме као што су:

  • Корупција (повреда) података.
  • Deadlock (взајна блокада) тхреадова.
  • Livelock (активне блокаде) тхреадова.

Избор одговарајућег механизма синхронизације зависи од природе задатка и типа ресурса.