Ich habe eine C-Anwendung mit vielen Worker-Threads. Es ist wichtig, dass diese nicht blockiert werden, so dass die Worker-Threads in eine Datei auf der Festplatte schreiben müssen. Ich schreibe sie in einen Ringpuffer im Speicher und dann einen dedizierten Thread, um diesen Puffer auf die Platte zu schreiben.Wie stdout im Speicher puffern und es von einem dedizierten Thread schreiben
Die Worker-Threads blockieren nicht mehr. Der dedizierte Thread kann beim Schreiben auf die Festplatte sicher blockieren, ohne die Worker-Threads zu beeinflussen (er hält beim Schreiben auf die Festplatte keine Sperre). Mein Speicherpuffer ist so groß eingestellt, dass der Writer-Thread mithalten kann.
Das alles funktioniert super. Meine Frage ist, wie implementiere ich etwas ähnliches für stdout?
Ich könnte Makro printf() in einen Speicherpuffer schreiben, aber ich habe keine Kontrolle über den gesamten Code, der auf stdout schreiben könnte (einige davon ist in Bibliotheken von Drittanbietern).
Gedanken? NickB
Alle Lösungen hier sind falsch, weil das Schreiben in Rohrleitungen blockieren kann. (Und wenn Sie sie nicht blockieren, wird die 'FILE' nur in einen nicht behebbaren Fehlerzustand geraten, wenn sie blockieren würde, wenn sie gespült werden muss.) –