Sobes.tech
Intern

არის თუ არა უსაფრთხო გოში რუკების კითხვა?

sobes.tech AI

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

Go ენის ფარგლებში, map-დან კითხვა უსაფრთხო არაა ნაკადებისთვის, თუ ერთდროულად ხდება წერა. მრავალნაკადიანი გარემოსთვის უსაფრთხო კითხვისთვის საჭიროა სინქრონიზაცია, მაგალითად, sync.RWMutex გამოყენებით კითვისა და წერისთვის ბლოკირება, ან sync.Map გამოყენება, რომელიც სპეციალურად შექმნილია კონკურენტული წვდომისთვის.

sync.RWMutex-თან მაგალითი:

import (
    "sync"
)

var (
    m  = make(map[string]int)
    mu sync.RWMutex
)

func read(key string) (int, bool) {
    mu.RLock()         // კითვის ბლოკირება
    defer mu.RUnlock() // ბლოკის მოხსნა
    val, ok := m[key]
    return val, ok
}

func write(key string, val int) {
    mu.Lock()         // წერის ბლოკირება
    defer mu.Unlock() // ბლოკის მოხსნა
    m[key] = val
}

ან გამოიყენეთ sync.Map:

import "sync"

var m sync.Map

func read(key string) (interface{}, bool) {
    return m.Load(key)
}

func write(key string, val interface{}) {
    m.Store(key, val)
}

sync.Map სასარგებლოა, როდესაც ბევრი კონკურენტული ოპერაცია მიმდინარეობს, მაგრამ აქვს თავისებურებები შესრულებისა და API-ის თვალსაზრისით.