Шартҳои рақобат чист?
sobes.tech AI
Ҷавоб аз AI
Ҳолати гонка — ин мушкилотест, ки дар барномаҳои бисёртредӣ ё бисёрпротсессӣ пайдо мешавад, вақте ки дурустии натиҷа аз тартиби иҷрои тредҳо/протсессҳо вобаста аст.
Одатан вақте ки чанд тред ба манбаъҳои умумӣ (муқаррароти, файлҳо, базаҳои додаҳо) бидуни ҳамоҳангсозӣ дастрасӣ мекунанд, ба вуҷуд меояд.
Ин ба рафтори номуайян, хатоҳо ва маълумоти нодуруст оварда мерасонад.
Масалан: Ду тред ҳамзамон кӯшиш мекунанд, ки тағйироти умумиро зиёд кунанд.
var sharedCounter = 0
func incrementCounter() {
let currentValue = sharedCounter // Тред 1 0-ро мехонад
// Як каме таъхир
let newValue = currentValue + 1 // Тред 1 1-ро ҳисоб мекунад
sharedCounter = newValue // Тред 1 1-ро менависад
}
// Агар Тред 2 currentValue-ро пеш аз навиштани newValue аз ҷониби Тред 1 мехонад:
func anotherIncrementCounter() {
let currentValue = sharedCounter // Тред 2 0-ро мехонад
let newValue = currentValue + 1 // Тред 2 1-ро ҳисоб мекунад
sharedCounter = newValue // Тред 2 1-ро менависад
}
Дар ин мисол, агар ҳар ду тред ҳамзамон бидуни ҳамоҳангсозӣ иҷро шаванд, дар натиҷа sharedCounter метавонад 1 шавад, на 2, ки интизор меравад.
Барои пешгирӣ кардани ҳолати гонка механизмҳои ҳамоҳангсозӣ истифода мешаванд:
- Мьютексҳо (Mutex): Дастрасиро ба манбаъ мепӯшонанд, танҳо як тред метавонад дар қисмати критикӣ қарор гирад.
- Семафорҳо (Semaphore): Миқдори тредҳоро маҳдуд мекунанд, ки метавонанд ҳамзамон ба манбаъ дастрасӣ пайдо кунанд.
- Очеркҳо (Dispatch Queues дар GCD): иҷрои вазифаҳо ба таври пайдарпай (барои Serial Queue) ё бо сатҳи муайяни параллелизм (барои Concurrent Queue) бо имконияти ҳамоҳангсозии дастрасӣ.
- Блокировкҳо (Locks): Намудҳои гуногуни блокировкҳо (масалан,
NSLock,NSRecursiveLock). - Операцияҳои атомӣ (Atomic Operations): Гарант мекунанд, ки амал (хониш, навишт, инкремент) атомӣ иҷро мешавад, яъне бо треди дигар кобул намешавад.
Дар таҳияи iOS, аксаран Grand Central Dispatch (GCD) ва Operation Queues барои идоракунии тредҳо ва пешгирии ҳолатҳои гонка истифода мешаванд. Serial Dispatch Queues автоматӣ ҳамоҳангсозии вазифаҳоро таъмин мекунанд, ки дар ин очереди иҷро мешаванд.