Middle
Jak odstranit závody při konkurenční práci vláken pomocí GCD?
sobes.tech AI
Odpověď od AI
V GCD (Grand Central Dispatch) se při práci s více vlákny používá synchronizace přístupu ke sdíleným zdrojům k prevenci závodů. Hlavní přístupy:
-
Použití sekvenčních (serial) front: pokud všechny operace se sdíleným zdrojem probíhají v jedné sekvenční frontě, budou prováděny postupně, čímž se zabrání současnému přístupu.
-
Použití bariér (barrier blocks) v konkurenčních frontách: bariéry zajišťují, že všechny předchozí úkoly jsou dokončeny před začátkem bariéry, a následující úkoly začínají po ní.
Příklad použití sekvenční fronty k ochraně zdroje:
let serialQueue = DispatchQueue(label: "com.example.serialQueue")
var sharedResource = 0
func incrementResource() {
serialQueue.async {
sharedResource += 1
print("Zdroj zvýšen na \(sharedResource)")
}
}
Tímto způsobem operace se sharedResource nebudou provádět současně, což zabraňuje závodům.