深夜发文怼go1.14.1,并发bug各种出现

语言: CN / TW / HK

如题,白白浪费我几天时间,偶发的并发bug不少,看我上篇文章就出现了各种bug,就不说了,现在来说个一定会出现的bug,

下面的代码在1.14.1版本是会报错的,结果不为1,但是我卸载后重新安装1.13.9之后就可以正常执行了!当然也可能是我的电脑原因,求大伙验证!

package main

import (
	"fmt"
	"sync"
)

var wg sync.WaitGroup

func main() {
	var m sync.Map

	for i := 0; i < 65536; i++ {
		m.Store(1, 1)
	}
	wg.Add(2)
	go Add(m)
	go sub(m)

	wg.Wait()
	fmt.Println(m.Load(1))
}
func Add(m sync.Map) {
	for i := 0; i < 10000; i++ {
		value, _ := m.Load(1)
		v := value.(int)
		v += 1
		m.Store(1, v)
	}
	wg.Done()
}

func sub(m sync.Map) {
	for i := 0; i < 10000; i++ {
		value, _ := m.Load(1)
		v := value.(int)
		v -= 1
		m.Store(1, v)
	}
	wg.Done()
}

不出意外的话,上面的额结果不会绝对是1 !!!大伙可以试试!我就不去PR了!

似乎1.13.9也会出现,可能真是我的电脑环境问题了!

分享到: