Middle — Middle+
Cum se pot preveni condițiile de cursă într-un mediu multithread?
sobes.tech AI
Răspuns de la AI
Pentru a preveni condițiile de cursă într-un mediu multi-thread pe iOS, se utilizează mecanisme de sincronizare care asigură accesul secvențial la resursele partajate:
- Semafori și mutexuri (de exemplu,
DispatchSemaphore,NSLock) — blochează accesul la secțiunea critică a codului până când un alt fir eliberează resursa. - Cozi de dispatch seriale — cozi GCD care garantează executarea sarcinilor în ordine.
- Operații atomice — operații care se execută integral fără întrerupere.
- Utilizarea
@synchronized— zahăr sintactic pentru blocarea obiectelor.
Exemplu cu DispatchQueue:
let serialQueue = DispatchQueue(label: "com.example.serialQueue")
var sharedResource = 0
serialQueue.async {
sharedResource += 1
}
serialQueue.async {
sharedResource += 1
}
Aici, modificările sharedResource se întâmplă secvențial, evitând condițiile de cursă.