Senior
Որ հետևյալ կոդի հատվածներից մեկը պարունակում է սխալ կամ հնարավոր խնդիր, կապված ալիքների հետ աշխատանքի հետ: Ընտրանք 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-ում է՝ բլոկում ուղարկում առանց ընդունողի։