Golang atomic 32비트 기계 문제

895 단어
테스트 과정에서 아토믹이 발견되었습니다.AddInt64 () 메모리 오류 32비트 window, linux에서 예시 코드를 정상적으로 실행할 수 없습니다.
<!-- lang: cpp -->
package main

import(
    "fmt"
    "sync/atomic"
)
type item struct{
    //c int32
    d int32
    a int64
}
type Obj struct{
    list map[string]*item   
}
func (ob *Obj)Init(){
    ob.list = make(map[string]*item)
    ob.list["a"] = &item{}
}
func (ob *Obj)Add(){
    atomic.AddInt64(&ob.list["a"].a,12)
    fmt.Println(ob.list["a"].a)
}
func main(){
    fmt.Println("Hello World")

    obj := new(Obj)
    obj.Init()      
    fmt.Printf("%v
",obj.list["a"]) obj.Add() }

최종적으로 문제점을 찾은 현상은 구조체 item에서 a 이전의 요소는 반드시 쌍수의 int 형식이어야 정상적으로 운행할 수 있고 위 코드의 주석행을 제거하면 정상적으로 운행할 수 있다. 가능한 원인을 추측할 수 있는 것은 구조체가 초기화될 때 밑바닥 분배 메모리와 관련이 있다.해결책은 일시적으로 item을 정의할 때 조심하는 거예요.

좋은 웹페이지 즐겨찾기