gpt4 book ai didi

go - golang 的 copyCheck.check 如何检测对象复制?

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

golang的copyCheck.check如何检测对象复制?

// copyChecker holds back pointer to itself to detect object copying.
type copyChecker uintptr

func (c *copyChecker) check() {
if uintptr(*c) != uintptr(unsafe.Pointer(c)) &&
!atomic.CompareAndSwapUintptr((*uintptr)(c), 0, uintptr(unsafe.Pointer(c))) &&
uintptr(*c) != uintptr(unsafe.Pointer(c)) {
panic("sync.Cond is copied")
}
}

最佳答案

当它被创建时,它会将它的值设置为它自己的地址。为了检查它是否被复制,它将它的地址与存储的值进行比较。如果它被复制,它的地址会不同,但值会相同,所以它不再指向它自己。

关于go - golang 的 copyCheck.check 如何检测对象复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48554717/

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