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

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

PHPz
PHPz앞으로
2024-02-09 11:42:29641검색

동시 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으로 문의하시기 바랍니다. 삭제