inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정

고루틴 동기화 고급

atomic.LoadInt64(&cnt) 결과가 이상 합니다.

229

Yoonjoo Lee

작성한 질문수 3

0

package main

import (

"fmt"

"runtime"

"sync"

"sync/atomic" //

_ "time"

)

func init() {

fmt.Println("Go Sync Advance study 4")

}

func onceTest() {

fmt.Println("onceTest !!")

}

func main() {

// 고루틴 동기화 고급

// 원자성 사용 -> 기능적으로 분할 불가능한 완전 보증된 일려의 조작

// 모든 조작이 완료 될 때까지 다른 프로세스 개입 불가

// sync/atomic 에서 원자적 연산자 제공

// https:// golang.org/pfg/sync/atomic 에서 계열 확인 가능

runtime.GOMAXPROCS(runtime.NumCPU())

var cnt int64 = 0

wg := sync.WaitGroup{}

maxN := 5000

for i := 0; i < maxN; i++ {

wg.Add(1)

go func(n int) {

//cnt++

atomic.AddInt64(&cnt, 1)

wg.Done()

}(i)

}

maxN = 2000

for i := 0; i < maxN; i++ {

wg.Add(1)

go func(n int) {

//cnt--

atomic.AddInt64(&cnt, -1)

wg.Done()

}(i)

}

var finalCnt int64 = 0

finalCnt = atomic.LoadInt64(&cnt)

wg.Wait()

fmt.Println("finalCnt : ", finalCnt)

fmt.Println("cnt : ", cnt)

}

상기 코드를 실행하면

cnt 는 3000 항상 나오는데

finalCnt  는 3005같은 다른 값이 나오는데, 혹시 놓친 부분이 있을까요?

go

답변 1

0

좋은사람

안녕하세요.

go sync에서 다른 서로 경쟁상태에서 나오는 값이 달라지는 것 같습니다.

https://medium.com/golangspec/synchronized-goroutines-part-i-4fbcdd64a4ec

url을 보시고 go sync 에 대해서 한 번 읽어보시고 소스코드를 리뷰 해보세요.

감사합니다.

고 인터페이스 관련

0

69

2

Join함수 사용이유가 궁금합니다

0

54

1

vscode 설정

0

126

2

arm64

0

202

2

undefined 에러 : UndeclaredImportedName

0

343

1

godoc 에러 관련

0

206

1

package is not in std 오류

0

986

1

맵 예제 코드가 바이러스 검사에 걸려요

0

234

1

for 반복문에서 break와 continue 차이점

0

224

1

후치연산 관련 질문입니다.

0

197

1

package관리에 질문이 있습니다.

0

282

1

go channel 에제에서 질문이 있습니다.

0

193

1

golang 질문

0

310

1

재귀 함수 관련하여 질문이 있습니다.

0

346

1

atom 서비스 종료 관련

0

403

1

vscode 환경설정 업데이트 부탁드립니다

1

405

2

waitGroup.Done을 지연 시키는 방식

0

450

1

첫 번째 예제 질문있습니다.

0

264

1

2개씩 체크가 되는 이유가 궁금합니다.

0

328

1

go 표준 코드 컨벤션이 있나요?

0

825

1

slice에서 make 궁금한 게 있습니다.

1

262

1

import 관리는 어떻게 하나요?

0

317

1

개발환경설정 질문드립니다.

0

486

1

이것도 closure인가요?

0

238

1