> 백엔드 개발 > Golang > 동시 golang 프로그래밍에서 서로 다른 배열 길이가 출력되는 이유는 무엇입니까?

동시 golang 프로그래밍에서 서로 다른 배열 길이가 출력되는 이유는 무엇입니까?

PHPz
풀어 주다: 2024-02-09 11:42:29
앞으로
647명이 탐색했습니다.

동시 golang 프로그래밍에서 서로 다른 배열 길이가 출력되는 이유는 무엇입니까?

php 편집자 Yuzai가 동시 golang 프로그래밍에서 다양한 배열 길이 출력에 대한 질문에 답변해 드립니다. 동시 프로그래밍에서는 여러 고루틴이 동시에 공유 리소스를 작동할 때 경쟁 조건이 발생하여 결과가 불확실할 수 있습니다. 여러 고루틴이 동시에 배열에서 작동하는 경우 배열 길이가 다를 수 있습니다. 이는 고루틴 간의 실행 순서가 불확실하고, 읽기 및 쓰기 작업이 동시에 발생하여 배열 길이에 불일치가 발생할 수 있기 때문입니다. 이 문제를 해결하려면 뮤텍스 잠금이나 채널과 같은 메커니즘을 사용하여 고루틴 간의 동기화 및 순차적 실행을 보장하여 특정 결과를 얻을 수 있습니다.

질문 내용

동시성 테스트를 위해 golang으로 간단한 프로그램을 작성하고 있는데 매번 capitalized배열 크기에 따라 출력이 달라지는 것을 이해하지 못합니다!

으아악

출력:

으아악 으아악 으아악 으아악
data := []rune{'a', 'b', 'c', 'd'}
var capitalized []rune

capit := func(r rune) {
    capitalized = append(capitalized, unicode.toupper(r))
    fmt.printf("%c done!\n", r)
}

fmt.printf("before: %c\n", capitalized)
for i := 0; i < len(data); i++ {
    go capit(data[i])
}
time.sleep(100 * time.millisecond)
fmt.printf("after: %c\n", capitalized)
로그인 후 복사

Solution

go: 데이터 경합 감지기

데이터 경쟁이 있습니다.

으아악

racer.go:

으아악

위 내용은 동시 golang 프로그래밍에서 서로 다른 배열 길이가 출력되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿