Sobes.tech
Junior — Middle

Ինչպե՞ս ապահովել տվյալների անվտանգ գրառում մի քանի goroutine-ներից առանց բլոկավորման օգտագործման։

sobes.tech AI

Պատասխան AI-ից

Go լեզվում, անվտանգ կերպով տվյալներ գրելու համար մի քանի goroutine-ներից միաժամանակ, սովորաբար բավական է օգտագործել հենց ալիքին, քանի որ Go- ի ալիքները ստանդարտորեն անվտանգ են միաժամանակյա գործառույթների համար:

Օրինակ՝

ch := make(chan int)

// Գրանցում ալիքին մի քանի goroutine-ներից
for i := 0; i < 5; i++ {
    go func(val int) {
        ch <- val // անվտանգ գրանցում
    }(i)
}

// Կարդալ ալիքից
for i := 0; i < 5; i++ {
    fmt.Println(<-ch)
}

Եթե ուզում եք ապահովել, որ գրանցումը չի բլոկվի, կարող եք օգտագործել բուֆերային ալիք։ Այս կերպ, ձեռքով լոկերներ չեն անհրաժեշտ, քանի որ ալիքն ապահովում է սինխրոնիզացիան։