우리는 각각 "생산자"와 "소비자"라는 두 가지 프로세스를 고려합니다. 생산자는 주기적인 프로세스이며, 주기를 거칠 때마다 소비자가 처리해야 하는 정보의 특정 부분을 생성합니다. 소비자 역시 주기적인 프로세스이며, 주기를 거칠 때마다 생산자가 생성한 대로 다음 정보를 처리할 수 있습니다. 간단한 예는 소비자 역할을 하는 천공 카드에 의해 천공될 천공 카드의 "정보 부분" 이미지를 생성하는 계산 프로세스에 의해 제공됩니다.[1]
생산자는 항목을 생성하여 데이터 구조에 저장하고, 소비자는 해당 구조에서 항목을 제거하고 처리합니다.
소비가 생산보다 크면 버퍼(데이터 구조)가 비워지고 소비자는 소비할 것이 없습니다.
소비가 생산보다 적으면 버퍼가 채워지고 생산자는 더 이상 아이템을 추가할 수 없습니다. 이는 제한된 버퍼라고 하는 고전적인 문제입니다.
버퍼에 이메일을 게시하는 생산자와 버퍼에서 이메일을 소비하고 제공된 이메일에 대한 새 액세스 비밀번호가 포함된 이메일이 전송되었다는 메시지를 표시하는 소비자가 있다고 가정합니다.
package main import ( "fmt" "os" "strconv" "sync" "time" ) type buffer struct { items []string mu sync.Mutex } func (buff *buffer) add(item string) { buff.mu.Lock() defer buff.mu.Unlock() if len(buff.items)구현 설명
코드 링크: https://github.com/jcelsocosta/race_condition/blob/main/producerconsumer/buffer/producerconsumer.go
https://www.cin.ufpe.br/~cagf/if677/2015-2/slides/08_Concorrencia (Jorge).pdf
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3