V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  goodwong  ›  全部回复第 1 页 / 共 1 页
回复总数  3
2019-05-29 11:49:40 +08:00
回复了 han365 创建的主题 V2EX V2EX 以前发的主题,想删除或者编辑,怎么办
如何删除账号?
2019-05-29 11:47:49 +08:00
回复了 zn 创建的主题 V2EX 建议 V2EX 加上评论的限时修改功能
测试*加粗功能*
2019-05-29 11:42:57 +08:00
回复了 helloworld12 创建的主题 问与答 golang 中并发读写同一个变量会出现部分错乱吗?
struct 会有差异,见代码:
```go

func structRaceWrong() {

x := struct {
A int
B int
}{1, 1}

var wg sync.WaitGroup

wg.Add(1)
go func() {
for i := 0; i < 1000000; i++ {
if x.A != x.B {
log.Println("A != B", x.A, x.B)
}
if i < 3 {
log.Printf("%p\n", &x)
}
}
wg.Done()
}()

wg.Add(1)
go func() {
for i := 0; i < 1000000; i++ {
x = struct {
A int
B int
}{x.A + 1, x.B + 1} // <---------- 导致 A、B 可能不一致
}
wg.Done()
}()

wg.Wait()
}

// 结论:Go 是值拷贝,结构体会出现复制一半就被其它读取了
func structRaceWrong2() {

x := struct {
A int
B int
}{1, 1}

var wg sync.WaitGroup

wg.Add(1)
go func() {
for i := 0; i < 1000000; i++ {
cp := x
if cp.A != cp.B {
log.Println("A != B", cp.A, cp.B)
}
if i < 3 {
log.Printf("%p\n", &x)
}
}
wg.Done()
}()

wg.Add(1)
go func() {
for i := 0; i < 1000000; i++ {
cp := x // <---------- 拷贝也不行,可能只拷贝一半
x = struct {
A int
B int
}{cp.A + 1, cp.B + 1}
}
wg.Done()
}()

wg.Wait()
}

// 结论:通过指针读取的数据是完整的,但不一定是最新的。
func structRaceOk() {

x := &struct {
A int
B int
}{0, 0}

var wg sync.WaitGroup

wg.Add(1)
go func() {
for i := 0; i < 1000000; i++ {
cp := x
if cp.A != cp.B { // <---------- 通过指针读取的数据是完整的,但不一定是最新的。
log.Fatal("A != B", cp.A, cp.B) // 不会出现
}
if i < 10 { // 抽取前 10 条数据检查
log.Printf("%p -> %p\n", &x, x)
log.Printf("-A%d - i%d = %d", cp.A, i, cp.A - i) // 不一定是最新的
}
if i - cp.A > 1 {
log.Printf("A:%d - i:%d = %d \n", cp.A, i, cp.A - i)
}
}
wg.Done()
}()

wg.Add(1)
go func() {
for i := 0; i < 1000000; i++ {
cp := x
x = &struct {
A int
B int
}{cp.A + 1, cp.B + 1}
}
wg.Done()
}()

wg.Wait()
}

```
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2915 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 03:10 · PVG 11:10 · LAX 19:10 · JFK 22:10
Developed with CodeLauncher
♥ Do have faith in what you're doing.