So habe ich mehrere Threads in die gleiche Datei schreiben durch Aufruf von Log :: write method.C++: Schreiben in eine Datei im Multithread-Programm
class Log
{
private:
ofstream log;
string file_path;
public:
Log(string);
void write(string);
};
Log::Log(string _file_path)
{
file_path=_file_path;
}
void Log::write(string str)
{
EnterCriticalSection(&CriticalSection);
log.open(file_path.c_str(),std::ofstream::app);
log<<str+'\n';
log.close();
LeaveCriticalSection(&CriticalSection);
}
Ist es sicher, wenn Threads Log :: Schreibverfahren des gleichen Objekts zur gleichen Zeit nennen?
Ja. Ziehen Sie in Erwägung, RAII zu verwenden, um den kritischen Abschnitt zu sperren/entsperren, um ihn als Ausnahme sicher zu machen. Erwägen Sie die C++ - Standardsperrung. Erwägen Sie die Verwendung eines separaten Protokollierungsthreads und einer Nachrichtenwarteschlange, um den Engpass bei der Sperrung zu verringern. Beachten Sie, dass das Öffnen von Dateien (unter MS Windows) eine sehr teure Operation ist - erwägen Sie, die Protokollierungsklasse in einen Singleton zu ändern und die Datei nur einmal zu öffnen. –
Verwenden Sie eine Protokollierungsbibliothek von Drittanbietern – ZivS