Sobes.tech
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-ում է՝ բլոկում ուղարկում առանց ընդունողի։