dqm4675
2018-03-08 13:08
浏览 39
已采纳

如何解决此程序中的死锁?

I am new to golang, so this deadlock issue is unknown for me. I've been Reading some articles, but it seems to be a quick fix in this program.

package main

import (
    "fmt"
)

//ping
func addValue(input1 int, input2 int, chn2 chan<- int) {
    chn2 <- input1 + input2
}

//pong
//function to write 1st user input to channel_1
func getUserInput(input1 int, input2 int, chn2 <-chan int, chn1 chan int, chn3 chan int) {
    chn1 <- input1
    chn1 <- input2
    //receiving info from other func and read into this func.
    val := <-chn2
    chn3 <- val
}

//Main function
func main() {
    var input1 int
    var input2 int
    chn1 := make(chan int, 3)
    chn2 := make(chan int)
    chn3 := make(chan int)

    //taking inputs from terminal
    fmt.Scanln(&input1)
    fmt.Scan(&input2)

    //calling go functions
    go getUserInput(input1, input2, chn1, chn2, chn3)
    go addValue(input1, input2, chn2)

    //shifting values from channels to var.
    /*x:=
      y :=
      z := <-chn3*/

    //print out the values on the terminal
    fmt.Println("Reading first input: ", <-chn1)
    fmt.Println("Reading second input: ", <-chn1)
    fmt.Println("Giving resulted value: ", <-chn3)

}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • doulan7166 2018-03-08 13:26
    已采纳

    You had function argument order wrong. Just change the function header and you are good

    Change

    func getUserInput(input1 int, input2 int, chn2 <-chan int, chn1 chan int, chn3 chan int) {
    

    to

    func getUserInput(input1 int, input2 int, chn1 chan int,chn2 <-chan int,  chn3 chan int) {
    

    Play link :https://play.golang.com/p/3lKLoEytr9J

    点赞 评论
  • douping5226 2018-03-08 13:32

    When you are calling the method getUserInput you are passing the channels chn1 and chn2 in the wrong position. Please replace the method calls like this go getUserInput(input1, input2, chn2, chn1, chn3) or switch the position in the method.

    点赞 评论

相关推荐 更多相似问题