gpt4 book ai didi

go - 试图了解 golang chan 导致崩溃或做其他事情

转载 作者:IT王子 更新时间:2023-10-29 01:56:25 25 4
gpt4 key购买 nike

以下是来自 https://golang.org/ref/mem 的示例:

var c = make(chan int)
var a string

func f() {
a = "hello, world"
<-c
}
func main() {
go f()
c <- 0
print(a)
}

is also guaranteed to print "hello, world". The write to a happens before the receive on c, which happens before the corresponding send on c completes, which happens before the print.

If the channel were buffered (e.g., c = make(chan int, 1)) then the program would not be guaranteed to print "hello, world". (It might print the empty string, crash, or do something else.)

我知道它可能会打印空字符串,但不是为了崩溃做其他事情,什么时候崩溃 发生了吗?它什么时候会做点别的事情

最佳答案

Go 中的字符串是 read only slice of bytes . Slice由长度指针组成。假设我们首先将长度设置为一个较大的值,然后更改指针。另一个 go routine 可能首先读取新的长度和旧的指针。然后它尝试读取前一个字符串的末尾。它要么读取一些垃圾,要么被操作系统停止并崩溃。

操作的顺序并不重要,如果你先设置指针,它可能指向的内存区域对于当前长度来说太短了。

关于go - 试图了解 golang chan 导致崩溃或做其他事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55372640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com