Қайсысы келесі код үзінділерінің бірі арналармен жұмыс істеу кезінде қате немесе әлеуетті мәселені қамтиды? 1-ші нұсқа package main func main() { ch := make(chan int) ch <- 1 } 2-ші нұсқа package main func main() { ch := make(chan int, 1) ch <- 1 } 3-ші нұсқа package main func main() { ch := make(chan int, 1) ch <- 1 <-ch } 4-ші нұсқа package main func main() { ch := make(chan int) close(ch) <-ch } 5-ші нұсқа package main func main() { ch := make(chan int, 3) ch <- 4 }
sobes.tech AI
Ҷавоб аз AI
Хатои дар Варианти 1 аст:
package main
func main() {
ch := make(chan int)
ch <- 1
}
Ин ҷо канал бе буфер ch := make(chan int) сохта мешавад. Фаристодани маълумот ба ин канал ch <- 1 то он даме, ки касе аз канал хонда натавонад, блок мешавад. Дар ин код, ягон қабулкунанда вуҷуд надорад, бинобар ин барнома ҳамеша бозмедорад (deadlock).
Варианти 2 дуруст аст, зеро канал бо буфер бо андоза 1 аст, ва фаристодан дар он, агар буфер пур набошад, блок намешавад.
Варианти 3 низ дуруст аст: фаристодан ва гирифтани маълумот мувозинанд.
Варианти 4 дуруст аст: аз канал баста метавон хонда, хондан арзиши сифрро бармегардонад ва блок намешавад.
Варианти 5 дуруст аст: буфер 3, як арзиш фиристода мешавад, буфер пур нашудааст.
Хулоса, мушкилот танҳо дар Варианти 1 аст — блокшавӣ дар вақти фиристодан ба канал бе буфер ва бе қабулкунанда.