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)
}

თუ გსურთ უზრუნველყოთ, რომ დაწერა არ ბლოკავს, შეგიძლიათ გამოიყენოთ ბუფერიანი არხი. ამ გზით, ხელით ბლოკირებები საჭირო არ არის, რადგან არხი უზრუნველყოფს სინქრონიზაციას.