Junior — Middle
Чӣ тавр NSRecursiveLock аз NSLock стандартӣ дар контексти бисёрпайравӣ фарқ мекунад?
sobes.tech AI
Ҷавоб аз AI
NSLock — ин ҷузъи оддӣ барои истиснои мутақобил аст, ки имкон намедиҳад, ки як ҷараён вориди қисмати критикӣ шавад, агар ҷараёни дигар аллакай инҷо бошад. Агар ҷараёни, ки аллакай NSLock-ро нигоҳ медорад, кӯшиш кунад онро дубора ба даст орад, он бозмедорад, ки ба deadlock оварда мерасонад.
NSRecursiveLock фарқ мекунад дар он, ки имкон медиҳад, ки як ҷараён чанд маротиба пайдарпай ин зангро ба даст орад, бидуни бозмедошт. Ин барои ҳолате муфид аст, ки методҳои рекурсивӣ истифодаи ҳамин зангро доранд. NSRecursiveLock ҳисобкунаки дастрасиро нигоҳ медорад, ва занг танҳо пас аз шумораи мувофиқи даъватҳои unlock озод мешавад.
Масалан:
let lock = NSRecursiveLock()
func recursiveFunction(_ count: Int) {
lock.lock()
defer { lock.unlock() }
if count > 0 {
recursiveFunction(count - 1) // дастрасии рекурсивии занг дар ҳамин ҷараён
}
}
recursiveFunction(3)
Агар истифодаи NSLock мешуд, дар даъвати рекурсивӣ deadlock ба вуҷуд меомад.