Golang---32-bit system under atomic. AddUint64 causes program crashes and workarounds

Source: Internet
Author: User
This is a creation in Article, where the information may have evolved or changed. Http://www.baidu.com/link?url=qb02vICS8NhIztRZ1n7wWHiJ6bDGFeIKQQQfr0w0BShbImeG_EuBkDGEiGzYUF44vQUB6lk_ 6z11uvp4fcdtonzmlvy0lm6fy-t-yu6bdia posted 1 hours ago (2014-02-12 10:44)
Read (7) | Comments (0)

0People to collect this article,

Likes 0

Package Mainimport ("sync/atomic" "unsafe") type a struct {x unsafe. Pointery Uint64}func Main () {p: = new (a) atomic. AddUint64 (&P.Y, 1)}

To run the change program on a 32-bit computer, an error occurs:

Panic:runtime Error:invalid memory address or nil pointer dereference

[Signal 0xc0000005 code=0x0 addr=0x0 PC=0X4198BC]

Goroutine 1 [Running]:

Runtime.panic (0x41c740, 0x445e4f)

c:/users/admini~1/appdata/local/temp/2/bindist550409343/go/src/pkg/runtime/panic.c:266 +0xa6

Sync/atomic. AddUint64 (0X114434AC, 0x1, 0x0, 0x4107e3, 0X397FCC)

c:/users/admini~1/appdata/local/temp/2/bindist550409343/go/src/pkg/sync/atomic/asm_386.s:118 +0xc

Main.main ()

E:/work/golang/src/demo/gobug/atomic/main.go:17 +0x4d

The specific reasons for the information are as follows:

https://code.google.com/p/go/issues/detail?id=5278

On x86-32, the 64-bit functions use instructions unavailable before the

Pentium MMX. On both ARM and x86-32, it's the caller ' s responsibility to

Arrange for 64-bit alignment of 64-bit words accessed atomically. The

First word in a global variable or in an allocated struct or slice can be

Relied upon to be 64-bit aligned.

The effect is:

The caller of a 64-bit atomic operation must ensure that the address of the pointer is aligned to a 8-byte boundary

There are two ways to do this:

1, modify the UInt64 field at the struct's location to ensure that the field address appears at the 8-byte boundary;

2, modify using Sync. Rwmutex to implement mutual exclusion, as follows

Mutex. Lock () UInt64 + = 1mutex. Unlock ()

Suggest a solution to the problem and solve it thoroughly


Disclaimer: Oschina Blog article copyright belongs to the author, protected by law. Not reproduced without the consent of the author.

No tags for this post. Unless noted, this site article is original or compiled, reproduced please specify: article from Kengine | Kankanews.com
Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.