Sobes.tech
Junior — Middle

Este posibil să se efectueze o scriere simultană a datelor în canal fără a folosi un buffer?

sobes.tech AI

Răspuns de la AI

În Go, canalele pot fi cu tampon sau fără tampon. Într-un canal fără tampon, scrierea (trimiterea) se blochează până când o altă gorutină citește valoarea din canal.

Scrierea simultană într-un canal fără tampon nu este posibilă, deoarece trimiterea se blochează până la primire, și doar un emițător poate transmite date în același timp.

Dacă este nevoie de o scriere simultană fără blocare, se folosesc canale tamponate, unde emițătorul poate pune date în tampon fără a aștepta o primire imediată.

Exemplu de canal fără tampon:

ch := make(chan int) // canal fără tampon

// Trimiterea se blochează până când cineva citește
ch <- 1

Pentru scriere simultană fără blocare, este nevoie de un tampon:

ch := make(chan int, 2) // tampon de 2 elemente
ch <- 1 // nu se blochează
ch <- 2 // nu se blochează

Pe scurt: fără tampon, scrierea simultană nu este posibil.