Busco un diseño libre de bloqueo conforme a estos requisitos:Buscando una estructura de un solo lector de un solo escritor sin bloqueo RT-safe
- un solo escritor escribe en una estructura y un solo lector lee de esta estructura (existe esta estructura ya y es seguro para su uso simultáneo de lectura/escritura)
- pero en algún momento, la estructura tiene que ser cambiado por el escritor, que luego Inicializa, interruptores y escribe en una nueva estructura (del mismo tipo pero con contenido nuevo)
- y en la próxima vez que el lector lea, cambia a esta nueva estructura (si el escritor cambia a una nueva estructura libre de bloqueos, el lector descarta estas estructuras, ignorando sus datos).
- Las estructuras se deben reutilizar, es decir, no se permite la asignación de memoria de montón/libre durante la operación de escritura/lectura/conmutación, para RT fines.
Actualmente he implementado un ringbuffer que contiene varias instancias de estas estructuras; pero esta implementación adolece del hecho de que cuando el escritor ha utilizado todas las estructuras presentes en el ringbuffer, ya no hay lugar para cambiar de estructura ... Pero el resto del ringbuffer contiene algunos datos que no necesitan ser leídos por el lector, pero no puede ser reutilizado por el escritor. Como consecuencia, el Ringbuffer no se ajusta a este propósito.
¿Alguna idea (nombre o pseudoimplementación) de un diseño sin bloqueo? Gracias por haber considerado este problema.
Demasiado énfasis no hace énfasis. – kennytm
@KennyTM: tienes razón. Editado – moala
Buena pregunta. Este es un problema común en los sistemas en tiempo real. Tengo curiosidad de saber si hay una forma disponible de hacerlo. – thebretness