Estoy tratando de encontrar una manera de escribir una aplicación con IPC sin bloqueo en Linux, en C, con procesadores multi-core.
Supongamos que tengo el proceso 1 y el proceso 2 que escriben en un FIFO o memoria compartida. Luego, el proceso 3 y el proceso 4 leerán de esa memoria compartida o FIFO.
¿Es esto posible con un algoritmo sin bloqueo?
Su orientación es muy apreciada.
c
linux
multithreading
escuela politécnica
fuente
fuente
Respuestas:
He visto referencias al uso de buffers de anillo y acceso controlado a los punteros de ubicación para eliminar o reducir la necesidad de bloqueos. Sin embargo, no elimina la necesidad de esperas, y solo debería funcionar, entonces un buffer de anillo tiene un escritor y un lector. En su caso, necesitaría al menos dos amortiguadores.
El mecanismo según lo entiendo es:
El escritor actualiza el último puntero de entrada.
el lector espera hasta que haya una entrada disponible en el búfer en anillo (¡último! = actual).
Dependiendo del tiempo de espera utilizado, esto puede agregar latencia para nuevos elementos en una cola vacía o quemar muchos ciclos de CPU en el ciclo de espera. El orden de actualización del puntero y la separación estricta del acceso de escritura es fundamental para que esto funcione. El escritor solo puede escribir la entrada del búfer en anillo antes de incrementar el puntero para que esté disponible para el lector.
fuente
Si es posible. Utilizamos uno de los algoritmos de la cola sin bloqueo en nuestro proyecto. Pero estos algoritmos realmente no son obvios. Si desea comprenderlos en profundidad, debe estar listo para pasar un par de meses.
fuente
La comunicación entre procesos no puede ser sin bloqueo. Solo entre hilos. Hasta donde tengo entendido.
fuente