Senior
Kurš no šiem koda fragmentiem satur kļūdu vai potenciālu problēmu, kas saistīta ar kanālu darbu? 1. variants package main func main() { ch := make(chan int) ch <- 1 } 2. variants package main func main() { ch := make(chan int, 1) ch <- 1 } 3. variants package main func main() { ch := make(chan int, 1) ch <- 1 <-ch } 4. variants package main func main() { ch := make(chan int) close(ch) <-ch } 5. variants package main func main() { ch := make(chan int, 3) ch <- 4 }
sobes.tech AI
Atbilde no AI
Kļūda ir 1. variantā:
package main
func main() {
ch := make(chan int)
ch <- 1
}
Šeit tiek izveidots nebuferēts kanāls ch := make(chan int). Sūtīšana šajā kanālā ch <- 1 bloķēsies, kamēr kāds nelasīs no kanāla. Šajā kodā nav neviena saņēmēja, tāpēc programma mūžīgi iestrēgs (deadlock).
-
variants ir pareizs, jo kanāls ir ar buferi, kura izmērs ir 1, un sūtīšana neblokēsies, ja buferis nav pilns.
-
variants arī ir pareizs: sūtīšana un saņemšana ir līdzsvarota.
-
variants ir pareizs: no slēgta kanāla var lasīt, lasīšana atgriezīs nulles vērtību un neblokēs.
-
variants ir pareizs: buferis 3, tiek sūtīta viena vērtība, buferis nav pilns.
Kopsavilkums: problēma ir tikai 1. variantā — bloķēšana, sūtot uz nebuferētu kanālu bez saņēmēja.