Tengo una aplicación multiproceso C++ que utiliza tuberías posix para realizar comunicaciones entre hilos de manera eficiente (por lo que no tengo que volverme loco con bloqueos).Establecer tamaño de búfer de tubería
He configurado la operación de escritura como no bloqueante, por lo que el escritor obtendrá un error si no hay suficiente espacio en el búfer para escribir.
if((pipe(pipe_des)) == -1)
throw PipeException();
int flags = fcntl(pipe_des[1], F_GETFL, 0); // set write operation non-blocking
assert(flags != -1);
fcntl(pipe_des[1], F_SETFL, flags | O_NONBLOCK);
Ahora me gustaría que para establecer el tamaño del búfer de tubería a un valor personalizado (una palabra en el caso específico).
He buscado en Google, pero no he podido encontrar nada útil. ¿Hay alguna manera (posiblemente compatible con posix) para hacerlo?
Gracias
Lorenzo
PS: Estoy bajo Linux (si puede ser útil)
Este es un uso totalmente inapropiado de assert(), a menos que su programa solo se ejecute en plataformas para las cuales fcntl() nunca tenga un error. –
Creo que debería aprender a usar primitivas de sincronización. Usar una tubería aumentará la sobrecarga aproximadamente 100 veces, y parece que no puede lograr lo que desea de todos modos. –
Sé cómo usar primitivas de sincronización :) En realidad, también tengo una versión que usa primitivas de sincronización ... En cuanto a los resultados de las pruebas, la versión con pipas es al menos más rápida que la de sincronización (en algunos casos, las pipas son velocíperas ...) – Zeruel