Мы рассматриваем два процесса, называемые «производитель» и «потребитель» соответственно. Производитель представляет собой циклический процесс и каждый раз, проходя свой цикл, он производит определенную порцию информации, которая должна быть обработана потребителем. Потребитель также представляет собой циклический процесс, и каждый раз, когда он проходит свой цикл, он может обрабатывать следующий фрагмент информации в том виде, в котором он был произведен производителем. Простым примером может служить вычислительный процесс, который создает в качестве «порций информации» изображения перфокарт, которые должны быть пробиты перфокартой, играющей роль потребителя.[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 (Хорхе).pdf
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3