RSS DEV 커뮤니티

Go 언어에서 버퍼 채널을 사용하여 세마포어 구현하기

이 코드는 버퍼 채널을 사용하여 Go 언어로 세마포어를 구현하는 것을 보여줍니다. 세마포어는 용량이 10으로 생성되어 최대 10개의 동시 프로세스를 허용합니다. `main` 함수는 1000번 반복하며, 각 반복마다 정수를 세마포어 채널로 보냅니다. 채널이 가득 차면, 채널에서 값이 해제될 때까지 루프가 블록됩니다. 각 반복마다 새로운 고루틴이 시작됩니다. 이 고루틴은 시작 메시지를 출력한 다음, 0초에서 20초 사이의 무작위 시간 동안 잠듭니다. 고루틴이 완료되면 세마포어 채널에서 값을 해제하여 다음 반복을 위해 사용할 수 있게 합니다. 값의 해제는 `<- sem` 문을 사용하여 수행하며, 이 문은 채널로 전송된 원래 값도 검색합니다. 프로그램은 각 프로세스에 대해 시작 및 종료 메시지를 출력하며, 프로세스 ID와 완료까지 걸린 시간을 포함합니다. 출력 결과는 최대 10개의 프로세스가 동시에 실행되면서 프로세스가 병렬로 실행됨을 보여줍니다. 프로그램은 `time` 및 `math/rand` 패키지를 사용하여 잠자는 시간에 무작위성을 부여합니다.
favicon
dev.to
Implement semaphore in golang by buffered channel
기사 이미지: Go 언어에서 버퍼 채널을 사용하여 세마포어 구현하기