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.