Ho un'applicazione C con molti thread di lavoro. È essenziale che questi non blocchino in modo tale che i thread di lavoro debbano scrivere su un file su disco, li faccio scrivere su un buffer circolare in memoria e quindi avere un thread dedicato per scrivere quel buffer su disco.Come bufferizzare lo stdout in memoria e scriverlo da un thread dedicato
I thread di lavoro non bloccano più. Il thread dedicato può bloccare in modo sicuro durante la scrittura su disco senza influire sui thread di lavoro (non tiene un blocco durante la scrittura su disco). Il mio buffer di memoria è regolato per essere sufficientemente grande che il thread dello scrittore può tenere il passo.
Questo funziona perfettamente. La mia domanda è, come faccio a implementare qualcosa di simile per stdout?
È possibile che macro printf() scriva in un buffer di memoria, ma non ho il controllo su tutto il codice che potrebbe scrivere su stdout (parte delle librerie di terze parti).
Pensieri? NickB
Tutte le soluzioni qui sono sbagliate, perché la scrittura su pipe può bloccare. (E se li si imposta non bloccante, il 'FILE' entrerà in uno stato di errore irreversibile se si bloccherebbe quando deve essere scaricato.) –