Sobes.tech
Senior

Milline järgmistest koodilõikudest sisaldab viga või potentsiaalset probleemi kanalitega töötamisel? Variant 1 package main func main() { ch := make(chan int) ch <- 1 } Variant 2 package main func main() { ch := make(chan int, 1) ch <- 1 } Variant 3 package main func main() { ch := make(chan int, 1) ch <- 1 <-ch } Variant 4 package main func main() { ch := make(chan int) close(ch) <-ch } Variant 5 package main func main() { ch := make(chan int, 3) ch <- 4 }

sobes.tech AI

Vastus AI-lt

Viga on valiku 1:

package main
func main() {
    ch := make(chan int)
    ch <- 1
}

Siin luuakse mitte-pufferkanal ch := make(chan int). Saadetis sellesse kanalisse ch <- 1 blokeerub, kuni keegi ei loe kanalist. Selles koodis pole vastuvõtjat, seega programm jääb igaveseks seisma (deadlock).

Variant 2 on õige, kuna kanal on pufferiga suurusega 1, ja saatmine ei blokeeru, kui puffer ei ole täis.

Variant 3 on samuti õige: saatmine ja vastuvõtt on tasakaalus.

Variant 4 on õige: saab lugeda suletud kanalist, lugemine tagastab nullväärtuse ja ei blokeeru.

Variant 5 on õige: puffer 3, saadetakse üks väärtus, puffer ei ole täis.

Kokkuvõttes on probleem ainult variandis 1 — blokeerimine saatmisel mitte-pufferkanalile ilma vastuvõtjata.