Schreiben (logging) in die gleiche Datei von verschiedenen threads , die unterschiedliche Funktionen?

In C++ gibt es eine Möglichkeit, um das schreiben in die Datei thread sicher in das folgende Szenario ?

void foo_one(){
lock(mutex1);
//open file abc.txt
//write into file
//close file
unlock(mutex1);
}

void foo_two(){
lock(mutex2);
//open file abc.txt
//write into file
//close file
unlock(mutex2);
}

In meiner Anwendung (multi-threaded) , ist es wahrscheinlich, dass foo_one() und foo_two() werden ausgeführt, indem zwei verschiedene threads zur gleichen Zeit .
Gibt es eine Möglichkeit, um die oben genannten thread-safe ?

Ich habe gedacht, dass mit der Datei-sperren ( fcntl und/oder lockf ), aber nicht sicher, wie Sie Sie zu benutzen, weil fopen() ist in der Anwendung ( performance-Gründen ) , und es wurde festgestellt, dass irgendwo diese Datei Schlösser sollten nicht verwendet werden, die mit fopen ( da es gepuffert ist )

PS : Die Funktionen foo_one() und foo_two() sind in zwei verschiedenen Klassen , und es gibt keine Möglichkeit, eine gemeinsam genutzte Daten zwischen Ihnen : (und leider ist das design ist so, dass eine Funktion nicht aufrufen kann, eine andere Funktion .

Verwandte: stackoverflow.com/questions/7565034/...
Ja. Sie brauchen nur eine Sperre, stellt die Datei (nennen wir ihn mutex3). PS. Wenn Sie das schreiben von C++ - code, Sie sollten mit RAII zu sperren/entsperren die Mutexe.
Die Funktionen foo_one() und foo_two() sind in zwei verschiedenen Klassen , und es gibt keine Möglichkeit, eine gemeinsam genutzte Ressource dazwischen 🙁 , und leider ist das design ist so, dass eine Funktion nicht aufrufen kann, eine andere Funktion .
Konnte gerade noch ein "Write" - Funktion einer Klasse aufgerufen wird, auf der es einen eigenen thread. Nur Schleife, bis es zu beenden. Dann jedes mal, wenn du etwas schreiben musst, um die Datei, können Sie einfach schieben Sie es in die Vektor-und der thread Schreibe Sie auf die Datei, sobald es eintrifft.
Verwandte: stackoverflow.com/questions/439791/...

InformationsquelleAutor k0n3ru | 2012-10-15

Schreibe einen Kommentar