Sobes.tech
Junior — Middle

Bir nechta goroutine'dan kanalga ma'lumotlarni xavfsiz yozishni qanday ta'minlash mumkin, blokirovka ishlatmasdan?

sobes.tech AI

AIdan javob

Go tilida, bir nechta goroutine'dan kanal orqali ma'lumotlarni xavfsiz yozish uchun odatda blokirovkalar ishlatmasdan, kanalni o'zi ishlatish kifoya qiladi, chunki Go'dagi kanallar standart ravishda oqim xavfsizdir.

Misol:

ch := make(chan int)

// Bir nechta goroutine'dan kanalga yozish
for i := 0; i < 5; i++ {
    go func(val int) {
        ch <- val // xavfsiz yozish
    }(i)
}

// Kanaldan o'qish
for i := 0; i < 5; i++ {
    fmt.Println(<-ch)
}

Agar yozish bloklanmasligini ta'minlamoqchi bo'lsangiz, bufferli kanal ishlatishingiz mumkin. Shu tarzda, qo'lda blokirovkalar kerak emas, chunki kanal sinxronizatsiya ta'minlaydi.