목차
질문 내용
솔루션
백엔드 개발 Golang 간단한 Go 시뮬레이션 - 동시성 문제

간단한 Go 시뮬레이션 - 동시성 문제

Feb 09, 2024 pm 02:10 PM
데이터 액세스

간단한 Go 시뮬레이션 - 동시성 문제

php 편집기 Xinyi는 "동시성 문제"라는 간단하지만 흥미로운 Go 시뮬레이션 게임을 제공합니다. 이 게임은 동시 프로그래밍을 테마로 하여 플레이어가 가상 세계에서 동시 프로그래밍의 매력을 경험할 수 있도록 해줍니다. 게임에서 플레이어는 여러 작업의 동시 실행을 처리하고 동시 프로그래밍 능력을 테스트하기 위한 코드를 작성해야 합니다. 게임 인터페이스는 간결하고 명확하며 조작이 간단하고 초보자가 시작하기에 적합하며 플레이어가 선택할 수 있는 다양한 난이도와 도전 모드도 제공합니다. 초보자든 숙련된 개발자든 이 시뮬레이션 게임에서 동시 프로그래밍의 즐거움을 누릴 수 있습니다.

질문 내용

저는 폴란드에서 온 학생이고 이번 학기에 동시 프로그래밍 과정(Go, Ada 및 향후 일부 이론 및 CSP 언어)을 시작했습니다. 솔직히 말해서 Golang은 흥미로워 보이지만 약간 혼란스럽습니다. 가장 중요한 것은 제 경험상 저는 제 자신을 평균 이하의 프로그래머라고 부를 것입니다. 기본적으로 제 임무는 시뮬레이션을 만드는 것인데, 이에 대해 다음과 같이 설명하겠습니다.

  • n*m 그리드가 있습니다

  • 여행자는 무작위로 생성될 수 있습니다. 최대 k명의 여행자, 각 여행자는 고유한 ID를 갖습니다(1, 2, 3 등, 최대 k명)

  • 무작위의 순간에 공간이 비어 있으면(확실히 여유 공간은 0일 것입니다) 여행자는 그리드에서 위, 왼쪽, 오른쪽 또는 아래로 이동할 수 있습니다

  • 메쉬의 현재 상태와 최근 움직임을 인쇄하는 카메라도 있습니다(아직 구현되지 않음)

  • 비공식적으로는 무슨 뜻이든 채널을 사용해야 한다고 들었습니다

내 생각은 각 여행자의 ID와 좌표로 구조를 만들고 이동 의지를 나타내는 채널에 그들의 ID를 보낸 다음 이동 방향을 무작위로 선택하는 것입니다.

저는 동시성에 대해 약간 혼란스럽습니다. wgs와 뮤텍스를 사용해야 하는지, 어디에 사용해야 하는지 뿐만 아니라, 예를 들어 func(){}를 사용하는 경우 루프가 내부에 있어야 하는지 외부에 있어야 하는지도 알 수 있습니다. 내 코드를 수정하기 위한 팁, 도움말 또는 수정 사항/아이디어를 주시면 매우 기쁘게 생각합니다. 추측한 대로 코드가 제대로 작동하지 않기 때문입니다(예: 카메라가 그리드를 인쇄할 때 때로는 k명 이상의 여행자가 있는 경우도 있습니다. 여행자들은 같은 번호를 공유하고 때로는 사라지는 것 같습니다). 모두들 즐거운 하루 보내시기를 바라며 도움을 주시면 정말 감사하겠습니다 :)

으아악

WGS, 뮤텍스, 원자 등 모든 아이디어에 약간 압도당했습니다.

솔루션

  • 작업을 동시에 처리하려는 경우(예: 카메라 스냅샷 촬영과 여행자 이동이 동시에 발생할 수 있음) 고루틴은 경량 스레드입니다.
  • 채널은 Go 루틴 간에 데이터를 전송하는 데 사용됩니다.
  • Mutex는 경쟁 조건을 피하기 위해 고루틴이 독점 데이터 액세스를 위해 공유 데이터에 잠금을 추가할 수 있도록 하는 데 사용됩니다.

그 말은:

  • 한 고루틴에서 카메라 스냅샷을 실행하는 동시에 여행자가 다른 고루틴에서 이동하도록 하는 것이 좋아 보입니다. 고루틴을 생성하는 것은 불필요합니다. 한 번만 수행하면 되므로 기본 고루틴에서 실행할 수 있습니다.
  • 귀하의 경우에는 채널이 아무런 도움이 되지 않습니다. 메시지를 생성하고 이를 채널을 통해 이동을 수행할 다른 고루틴으로 보내는 고루틴이 있습니다. 이 모든 작업을 단일 고루틴에서 순차적으로 수행하고 불필요한 복잡성을 피할 수 있습니다. 채널은 다양한 사용 사례에 유용하지만 여기서는 중복됩니다.
  • 공유 메모리(그리드)에 액세스하는 두 개의 고루틴이 있으므로 경쟁 조건을 방지하려면 뮤텍스가 필요합니다. 이들 중 하나가 실행될 때마다 "잠금"하고 작업을 완료한 다음 "잠금 해제"해야 합니다. 잠금을 획득한 첫 번째 고루틴이 잠금 해제될 때까지 다른 고루틴은 잠금 단계에서 차단됩니다. 읽기/쓰기 잠금을 사용하면 더욱 최적화할 수 있습니다(읽기 잠금은 카메라에만 필요하고 읽기/쓰기 잠금은 모바일 코루틴에만 필요함)
  • 더 많은 무작위성을 원한다면 각 여행자를 위한 고루틴을 만들 수 있습니다.

위 내용은 간단한 Go 시뮬레이션 - 동시성 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

자바에서 dao는 무엇을 의미합니까? 자바에서 dao는 무엇을 의미합니까? Apr 21, 2024 am 02:08 AM

Java의 DAO(Data Access Object)는 애플리케이션 코드와 지속성 계층을 분리하는 데 사용되며 다음과 같은 장점이 있습니다. 분리: 애플리케이션 로직에서 독립되어 수정이 쉽습니다. 캡슐화: 데이터베이스 액세스 세부 정보를 숨기고 데이터베이스와의 상호 작용을 단순화합니다. 확장성: 새로운 데이터베이스 또는 지속성 기술을 지원하기 위해 쉽게 확장할 수 있습니다. DAO를 사용하면 애플리케이션은 데이터베이스 세부 정보를 직접 처리하지 않고도 엔터티 생성, 읽기, 업데이트 및 삭제와 같은 데이터베이스 작업을 수행하는 메서드를 호출할 수 있습니다.

단일 카드는 듀얼 카드보다 Llama를 70B 더 빠르게 실행합니다. Microsoft는 A100에 FP6을 넣었습니다 | 단일 카드는 듀얼 카드보다 Llama를 70B 더 빠르게 실행합니다. Microsoft는 A100에 FP6을 넣었습니다 | Apr 29, 2024 pm 04:55 PM

FP8 이하의 부동 소수점 수량화 정밀도는 더 이상 H100의 "특허"가 아닙니다! Lao Huang은 모든 사람이 INT8/INT4를 사용하기를 원했고 Microsoft DeepSpeed ​​팀은 NVIDIA의 공식 지원 없이 A100에서 FP6을 실행하기 시작했습니다. 테스트 결과에 따르면 A100에 대한 새로운 방법 TC-FPx의 FP6 양자화는 INT4에 가깝거나 때로는 더 빠르며 후자보다 정확도가 더 높은 것으로 나타났습니다. 또한 오픈 소스로 제공되고 DeepSpeed와 같은 딥 러닝 추론 프레임워크에 통합된 엔드투엔드 대규모 모델 지원도 있습니다. 이 결과는 대형 모델 가속화에도 즉각적인 영향을 미칩니다. 이 프레임워크에서는 단일 카드를 사용하여 Llama를 실행하면 처리량이 듀얼 카드보다 2.65배 더 높습니다. 하나

U 디스크의 쓰기 방지를 제거하는 방법 몇 가지 간단하고 효과적인 방법이 도움이 될 수 있습니다. U 디스크의 쓰기 방지를 제거하는 방법 몇 가지 간단하고 효과적인 방법이 도움이 될 수 있습니다. May 02, 2024 am 09:04 AM

U 디스크는 일상 업무와 생활에서 일반적으로 사용되는 저장 장치 중 하나이지만 때로는 U 디스크가 쓰기 금지되어 데이터를 쓸 수 없는 상황이 발생할 수 있습니다. 이 문서에서는 USB 플래시 드라이브의 쓰기 보호를 신속하게 제거하고 USB 플래시 드라이브의 정상적인 사용을 복원하는 데 도움이 되는 몇 가지 간단하고 효과적인 방법을 소개합니다. 도구 자료: 시스템 버전: Windows1020H2, macOS BigSur11.2.3 브랜드 모델: SanDisk UltraFlair USB3.0 플래시 드라이브, Kingston DataTraveler100G3USB3.0 플래시 드라이브 소프트웨어 버전: DiskGenius5.4.2.1239, ChipGenius4.19.1225 1. 물리적 쓰기 방지 스위치를 확인하세요. 일부 USB 플래시 드라이브의 USB 플래시 드라이브

mysql 데이터베이스는 무엇을 합니까? mysql 데이터베이스는 무엇을 합니까? Apr 22, 2024 pm 06:12 PM

MySQL은 다음과 같은 주요 기능을 제공하는 관계형 데이터베이스 관리 시스템입니다. 데이터 저장 및 관리: 데이터 생성 및 구성, 다양한 데이터 유형, 기본 키, 외래 키 및 인덱스를 지원합니다. 데이터 쿼리 및 검색: SQL 언어를 사용하여 데이터를 쿼리, 필터링 및 검색하고 실행 계획을 최적화하여 효율성을 향상시킵니다. 데이터 업데이트 및 수정: INSERT, UPDATE, DELETE 명령을 통해 데이터를 추가, 수정 또는 삭제하고 트랜잭션을 지원하여 일관성을 보장하고 변경 사항을 취소하는 롤백 메커니즘을 지원합니다. 데이터베이스 관리: 데이터베이스와 테이블을 생성 및 수정하고, 데이터를 백업 및 복원하고, 사용자 관리 및 권한 제어를 제공합니다.

API 인터페이스는 무엇을 위한 것인가요? API 인터페이스는 무엇을 위한 것인가요? Apr 23, 2024 pm 01:51 PM

API 인터페이스는 소프트웨어 구성 요소 간의 상호 작용을 위한 사양이며 서로 다른 응용 프로그램이나 시스템 간의 통신 및 데이터 교환을 구현하는 데 사용됩니다. API 인터페이스는 애플리케이션이 함께 작동할 수 있도록 개발자의 지침을 컴퓨터 언어로 변환하는 "번역기" 역할을 합니다. 편리한 데이터 공유, 단순화된 개발, 향상된 성능, 강화된 보안, 향상된 생산성 및 상호 운용성 등의 장점이 있습니다.

mysql에서 스키마는 무엇을 의미합니까? mysql에서 스키마는 무엇을 의미합니까? May 01, 2024 pm 08:33 PM

MySQL의 스키마는 데이터 일관성, 데이터 액세스 제어를 보장하고 데이터베이스 설계를 단순화하기 위해 데이터베이스 개체(예: 테이블, 뷰)를 구성 및 관리하는 데 사용되는 논리적 구조입니다. 스키마의 기능은 다음과 같습니다. 1. 데이터 구성 2. 데이터 일관성 4. 데이터베이스 설계

Redis 캐시 구현 원리 Redis 캐시 구현 원리 Apr 19, 2024 pm 10:36 PM

Redis 캐싱 메커니즘은 키-값 저장소, 메모리 저장소, 만료 정책, 데이터 구조, 복제 및 지속성을 통해 구현됩니다. 데이터 획득, 캐시 히트, 캐시 미스, 캐시 쓰기, 캐시 업데이트의 단계를 거쳐 빠른 데이터 접근과 고성능 캐싱 서비스를 제공합니다.

Java Servlet의 애플리케이션 시나리오는 무엇입니까? Java Servlet의 애플리케이션 시나리오는 무엇입니까? Apr 17, 2024 am 08:21 AM

JavaServlet은 1. 동적 콘텐츠 생성, 2. 데이터 액세스 및 처리, 4. 파일 업로드, 6. 필터, 예: 양식 제출을 처리하고 이름과 이메일을 매개변수로 사용하고 Success.jsp로 리디렉션하는 FormSubmitServlet을 만듭니다.

See all articles