Golang 병렬 처리에서 난수 생성을 동기화하는 방법은 무엇입니까?
Jun 03, 2024 pm 02:53 PMGo 동시 프로그래밍의 동기화된 난수 생성: 뮤텍스(sync.Mutex)를 사용하여 rand.Rand 난수 생성기에 대한 액세스를 제어합니다. 각 고루틴은 난수를 생성하기 전에 뮤텍스를 획득하고 생성 후 뮤텍스를 해제합니다. 이렇게 하면 한 번에 하나의 고루틴만 난수 생성기에 액세스할 수 있어 데이터 경합이 제거됩니다.
Golang 병렬 처리에서 난수 생성을 동기화하는 방법은 무엇입니까?
Go 동시 프로그래밍에서는 여러 고루틴에 걸쳐 난수를 생성해야 하는 경우가 있습니다. 동기화가 처리되지 않으면 경합 상태가 발생하고 예측할 수 없는 동작이 발생할 수 있습니다.
병렬 난수 생성
Go는 의사 난수를 생성하는 math/rand
패키지를 제공합니다. 기본적으로 이는 동시성이 안전하지 않은 방식으로 작동합니다. 즉, 동일한 rand.Rand
인스턴스에 동시에 액세스하면 데이터 경합과 불확실한 결과가 발생합니다. math/rand
包来生成伪随机数。默认情况下,它以非并发安全的方式操作。这意味着如果并发访问同一个 rand.Rand
实例,则会出现数据争用和不确定的结果。
使用互斥锁进行同步
为了在并行处理中同步随机数生成,可以使用互斥锁 (sync.Mutex
)。互斥锁允许一次只有一个 goroutine 访问临界区(在这种情况下,rand.Rand
实例)。
以下代码演示如何使用互斥锁同步随机数生成:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
|
在这种方法中,使用了一个全局 randomLock
互斥锁来保护对 randomGen
sync.Mutex
)을 사용할 수 있습니다. 뮤텍스를 사용하면 한 번에 하나의 고루틴만 임계 섹션(이 경우 rand.Rand
인스턴스)에 액세스할 수 있습니다. 🎜🎜다음 코드는 뮤텍스를 사용하여 난수 생성을 동기화하는 방법을 보여줍니다. 🎜rrreee🎜이 접근 방식에서는 전역 randomLock
뮤텍스를 사용하여 randomGen
액세스에 대한 액세스를 보호합니다. 난수 생성기에. 각 고루틴은 난수를 생성하기 전에 뮤텍스를 획득하고 생성 후 뮤텍스를 해제합니다. 이렇게 하면 한 번에 하나의 고루틴만 난수 생성기에 액세스할 수 있어 데이터 경합이 제거됩니다. 🎜🎜이러한 방식으로 병렬 처리에서 난수를 안전하고 안정적으로 생성할 수 있습니다. 🎜위 내용은 Golang 병렬 처리에서 난수 생성을 동기화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

인기 기사

인기 기사

뜨거운 기사 태그

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Golang을 사용하여 파일을 안전하게 읽고 쓰는 방법은 무엇입니까?

Golang 데이터베이스 연결을 위한 연결 풀을 구성하는 방법은 무엇입니까?

Golang 프레임워크의 오류 처리에 대한 모범 사례는 무엇입니까?
