解决与goroutines的冲突?

时间:2016-10-29 09:32:32

标签: go goroutine

我有一点点怀疑 假设有三个函数A,B,C 从A和B都调用C. 我在不同的线程上运行A和B,当它在其中调用C时,它会在功能中随时产生冲突

供参考我正在添加此代码

package main

import (
"fmt"
)

func xyz() {
     for true {
         fmt.Println("Inside xyz")
         call("xyz")
     }
}

func abc() {
    for true {
         fmt.Println("Inside abc")
         call("abc")
    }
}

func call(s string) {
    fmt.Println("call from " + s)
}

func main() {
    go xyz()
    go abc()
    var input string
    fmt.Scanln(&input)
}

这里A = xyz(),B = abc(),C = call()

将来运行这两个例行程序时会出现任何冲突或任何运行时错误

1 个答案:

答案 0 :(得分:1)

多个goroutine是否可以安全地同时运行归结为它们是否在没有同步的情况下共享数据。在此示例中,abcxyz都使用stdout打印到fmt.Println,并调用相同的例程call,打印到stdout使用fmt.Println。由于fmt.Println doesn't use synchronization when printing to stdout,答案是否定的,这个程序并不安全。