Junior — Middle
Můžete vysvětlit koncept mechanismu čtenářů-a pisatelů a jeho použití?
sobes.tech AI
Odpověď od AI
Mechanismus čtenářů-zapisovačů je koncept synchronizace přístupu ke sdílenému zdroji, kdy několik vláken může současně číst data, ale zápis musí být výlučný.
Hlavní myšlenka:
- Několik čtenářů může současně získat přístup ke zdroji bez blokování, protože čtení nemění stav.
- Zápis vyžaduje výlučný přístup, aby se předešlo konfliktům a zajistila integrita dat.
Použití v iOS může být například při práci se sdílenými daty nebo cache, kde je důležité povolit více paralelních čtení, ale blokovat přístup při zápisu, aby se zabránilo závodním podmínkám a poškození dat.
Příklad v Swift s využitím DispatchQueues:
let concurrentQueue = DispatchQueue(label: "com.example.readersWriters", attributes: .concurrent)
var sharedResource = [String]()
func readData() {
concurrentQueue.sync {
print("Čtení dat: \(sharedResource)")
}
}
func writeData(newValue: String) {
concurrentQueue.async(flags: .barrier) {
sharedResource.append(newValue)
print("Data zapsána: \(newValue)")
}
}
Zde čtení probíhá paralelně, zatímco zápis s příznakem .barrier blokuje frontu, čímž zajišťuje výlučný přístup.