Sobes.tech
Junior — Middle

მთავარი დისპეჩერში დაწყებული კორუტინების შესრულებისას, საერთო ცვლადის უსაფრთხოდ გაზრდისთვის სინქრონიზაციის გამოყენება აუცილებელია?

sobes.tech AI

პასუხი AI-სგან

თუ კორუტინები Main Dispatcher-ში (ანუ მთავარი ნაკადის) დაწყებულია, მაშინ საერთო ცვლადის გაზრდისთვის ჩვეულებრივ არ არის საჭირო სინქრონიზაცია, რადგან კოდი შესრულდება ერთ ნაკადში თანმიმდევრობით.

თუმცა, თუ ცვლადი შეიძლება შეიცვალოს სხვა ნაკადებიდან ან dispatcher-ებიდან, მაშინ საჭიროა სინქრონიზაცია მონაცემთა შეჯახების თავიდან ასაცილებლად.

მტკიცებულება უსაფრთხო გაზრდის შესახებ Main Dispatcher-ში:

var counter = 0

fun increment() {
    // შესრულდება Main Dispatcher-ში, ამიტომ სინქრონიზაცია საჭირო არ არის
    counter++
}

თუ წვდომა ცვლადზე ხდება სხვადასხვა ნაკადებიდან, რეკომენდირებულია გამოიყენოთ Mutex ან ატომური ტიპები.