Junior — Middle
Ar galite paaiškinti, kokie blokavimo tipai egzistuoja ir kaip jie veikia daugiagijiniame programavime?
sobes.tech AI
Atsakymas iš AI
Daugiabriauniame programavime yra įvairių tipų užraktų, kurie padeda sinchronizuoti prieigą prie bendrų išteklių:
- Mutex (Mutual Exclusion) — užtikrina išskirtinį prieigą prie ištekliaus. Tik vienas srautas gali įgyti mutex vienu metu.
- Rekursinis mutex — leidžia tam pačiam srautui kelis kartus įgyti užraktą be tarpusavio blokavimo.
- Skaitymo-rašymo užraktas (Read-Write Lock) — leidžia keliems srautams vienu metu skaityti išteklių, tačiau rašymas įmanomas tik išskirtinai.
- Semaforas — riboja skaičių srautų, kurie gali vienu metu pasiekti išteklių.
- Spinlock (aktyvus laukimas) — srautas cikle tikrina, ar užraktas prieinamas, nesileisdamas į laukimo būseną.
Pavyzdys, kaip naudoti mutex Swift kalba:
let lock = NSLock()
func criticalSection() {
lock.lock()
// Kritinė sekcija
lock.unlock()
}
Užrakto tipo pasirinkimas priklauso nuo užduoties ir našumo bei saugumo reikalavimų.