Consideramos dos procesos, denominados “productor” y “consumidor”, respectivamente. El productor es un proceso cíclico y cada vez que recorre su ciclo produce una determinada porción de información, la cual debe ser procesada por el consumidor. El consumidor también es un proceso cíclico y cada vez que pasa por su ciclo puede procesar la siguiente información, tal como fue producida por el productor. Un ejemplo sencillo lo da un proceso computacional, que produce como “porciones de información” imágenes de tarjetas perforadas que se perforan con una tarjeta perforada, que desempeña el papel del consumidor.[1]
Un productor crea artículos y los almacena en una estructura de datos, mientras que un consumidor elimina artículos de esa estructura y los procesa.
Si el consumo es mayor que la producción, el buffer (estructura de datos) se vacía y el consumidor no tiene nada que consumir
Si el consumo es menor que producción, el buffer se llena y el productor no puede agregar más artículos. Este es un problema clásico llamado búfer limitado.
Supongamos que tenemos un productor que publica un correo electrónico en el búfer y un consumidor que consume el correo electrónico del búfer y muestra un mensaje que indica que se envió un correo electrónico con la nueva contraseña de acceso para el correo electrónico proporcionado.
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)Explicando la implementación
Enlace de código: 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
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3