Sobes.tech
Middle

Чӣ гуна метавон дар кор бо сӯрохиҳои ҳамзамон GCD-ро бартараф кард?

sobes.tech AI

Ҷавоб аз AI

Дар GCD (Grand Central Dispatch), барои пешгирии ҳолатҳои рақобат дар вақти кор бо сӯзишвории ҳамоҳанг, истифодаи ҳамоҳангсозии дастрасӣ ба захираҳои умумӣ истифода мешавад. Равишҳои асосӣ:

  • Истифодаи навбатҳои силсилавӣ (serial): агар ҳамаи амалиётҳо бо захираи умумӣ дар як навбат иҷро шаванд, онҳо ба тартиб иҷро мешаванд ва дастрасии ҳамзамонӣ пешгирӣ мешавад.

  • Истифодаи монеаҳо (barrier blocks) дар навбатҳои ҳамоҳанг: монеаҳо кафолат медиҳанд, ки ҳамаи вазифаҳои қаблӣ пеш аз оғоз кардани монеа анҷом ёфтаанд, ва вазифаҳои баъдӣ пас аз он оғоз мешаванд.

Масалан, истифодаи навбатии силсилавӣ барои ҳимояи захира:

let serialQueue = DispatchQueue(label: "com.example.serialQueue")
var sharedResource = 0

func incrementResource() {
    serialQueue.async {
        sharedResource += 1
        print("Захира афзоиш ёфт ба \(sharedResource)")
    }
}

Тавре ки мебинем, амалиётҳо бо sharedResource дар як вақт иҷро намешаванд, ки ҳолатҳои рақобатро пешгирӣ мекунад.