Go 동시 프로그래밍의 동기화된 난수 생성: 뮤텍스(sync.Mutex)를 사용하여 rand.Rand 난수 생성기에 대한 액세스를 제어합니다. 각 고루틴은 난수를 생성하기 전에 뮤텍스를 획득하고 생성 후 뮤텍스를 해제합니다. 이렇게 하면 한 번에 하나의 고루틴만 난수 생성기에 액세스할 수 있어 데이터 경합이 제거됩니다.
Golang 병렬 처리에서 난수 생성을 동기화하는 방법은 무엇입니까?
Go 동시 프로그래밍에서는 여러 고루틴에 걸쳐 난수를 생성해야 하는 경우가 있습니다. 동기화가 처리되지 않으면 경합 상태가 발생하고 예측할 수 없는 동작이 발생할 수 있습니다.
병렬 난수 생성
Go는 의사 난수를 생성하는 math/rand
패키지를 제공합니다. 기본적으로 이는 동시성이 안전하지 않은 방식으로 작동합니다. 즉, 동일한 rand.Rand
인스턴스에 동시에 액세스하면 데이터 경합과 불확실한 결과가 발생합니다. math/rand
包来生成伪随机数。默认情况下,它以非并发安全的方式操作。这意味着如果并发访问同一个 rand.Rand
实例,则会出现数据争用和不确定的结果。
使用互斥锁进行同步
为了在并行处理中同步随机数生成,可以使用互斥锁 (sync.Mutex
)。互斥锁允许一次只有一个 goroutine 访问临界区(在这种情况下,rand.Rand
实例)。
以下代码演示如何使用互斥锁同步随机数生成:
package main import ( "math/rand" "sync" ) var ( // 全局互斥锁 randomLock sync.Mutex // 全局随机数生成器 randomGen *rand.Rand ) func init() { // 在程序启动时初始化随机数生成器 // 并设置随机种子 randomGen = rand.New(rand.NewSource(time.Now().UnixNano())) } func main() { // 创建一个等待组来跟踪 goroutine var wg sync.WaitGroup // 启动 10 个 goroutine 生成 10 个随机数 for i := 0; i < 10; i++ { wg.Add(1) go func(i int) { // 使用互斥锁保护随机数生成 randomLock.Lock() value := randomGen.Intn(100) randomLock.Unlock() // 打印生成的随机数 fmt.Printf("Goroutine %d: %d\n", i, value) wg.Done() }(i) } // 等待所有 goroutine 完成 wg.Wait() }
在这种方法中,使用了一个全局 randomLock
互斥锁来保护对 randomGen
sync.Mutex
)을 사용할 수 있습니다. 뮤텍스를 사용하면 한 번에 하나의 고루틴만 임계 섹션(이 경우 rand.Rand
인스턴스)에 액세스할 수 있습니다. 🎜🎜다음 코드는 뮤텍스를 사용하여 난수 생성을 동기화하는 방법을 보여줍니다. 🎜rrreee🎜이 접근 방식에서는 전역 randomLock
뮤텍스를 사용하여 randomGen
액세스에 대한 액세스를 보호합니다. 난수 생성기에. 각 고루틴은 난수를 생성하기 전에 뮤텍스를 획득하고 생성 후 뮤텍스를 해제합니다. 이렇게 하면 한 번에 하나의 고루틴만 난수 생성기에 액세스할 수 있어 데이터 경합이 제거됩니다. 🎜🎜이러한 방식으로 병렬 처리에서 난수를 안전하고 안정적으로 생성할 수 있습니다. 🎜위 내용은 Golang 병렬 처리에서 난수 생성을 동기화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사는 문자열 조작용 Go의 "문자열"패키지 사용에 대해 논의하고, 효율성을 높이고 유니 코드를 효과적으로 처리하기 위해 일반적인 기능 및 모범 사례를 자세히 설명합니다.

이 기사는 Cryptographic Operations를위한 Go의 "Crypto"패키지를 사용하여 보안 구현을위한 주요 생성, 관리 및 모범 사례를 논의하는 자세한 내용.

이 기사는 현재 시간 얻기, 특정 시간 만들기, 구문 분석 문자열 및 경과 시간 측정 등 GO의 "시간"패키지 사용에 대해 자세히 설명합니다.

기사는 가변 검사 및 수정을위한 GO의 "Reflect"패키지를 사용하여 방법 및 성능 고려 사항을 강조합니다.

이 기사에서는 동시 프로그래밍에서 원자 운영을위한 Go의 "Sync/Atomic"패키지 사용에 대해 논의하여 레이스 조건을 예방하고 성능 향상과 같은 이점을 자세히 설명합니다.

이 기사는 구문, 안전한 변환 관행, 일반적인 함정 및 학습 자원을 포함한 GO의 유형 변환에 대해 설명합니다. 명시 적 유형 변환 및 오류 처리를 강조합니다. [159 자]

이 기사는 구문, 공황 및 잘못된 유형과 같은 잠재적 오류, 안전한 유형, 안전한 취급 방법 및 성능 영향에 중점을 둔 유형의 어설 션에 대해 설명합니다.

이 기사는 여러 채널 작업을 처리하기위한 GO에서 "Select"명령문의 사용, "스위치"문의 차이점 및 여러 채널 처리, 타임 아웃 구현, 비 -B와 같은 일반적인 사용 사례를 설명합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

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

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

WebStorm Mac 버전
유용한 JavaScript 개발 도구

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구
