golang在32位系统下atomic.AddUint64导致程序崩溃及解决办法
packagemain import( "sync/atomic" "unsafe" ) typeastruct{ xunsafe.Pointer yuint64 } funcmain(){ p:=new(a) atomic.AddUint64(&p.y,1) } 在32位计算机上运行改程序,会出现错误:
查了资料具体原因如下:
其大意是:
的办法有两种: 1,修改uint64字段在struct 的位置确保字段地址出现在8字节的边界; 2,修改使用sync.RWMutex来实现互斥,如下 mutex.Lock() uint64+=1 mutex.Unlock() 建议使用办法2来彻底解决问题 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |