k0n*_*3ru 5 c++ logging multithreading file
在C++中是否有任何方法可以在以下场景中使写入文件线程安全?
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);
}
Run Code Online (Sandbox Code Playgroud)
在我的应用程序(多线程)中,foo_one()和foo_two()很可能同时由两个不同的线程执行.有没有办法让上面的线程安全?
我考虑过使用文件锁(fcntl和/或lockf),但不确定如何使用它们,因为fopen()已经在应用程序中使用(性能原因),并且在某些地方声明不应该使用这些文件锁与fopen(因为它被缓冲)
PS:函数foo_one()和foo_two()在两个不同的类中,并且没有办法在它们之间有共享数据:(可遗憾的是,设计是这样的,一个函数不能调用其他函数.
添加记录功能.
这两个函数都调用日志记录功能(执行适当的锁定).
mutex logMutex;
void log(std::string const& msg)
{
RAIILock lock(logMutex);
// open("abc.txt");
// write msg
// close
}
Run Code Online (Sandbox Code Playgroud)
foo_one()
如果函数和的本质foo_two()
只是打开文件,向其中写入一些内容,然后关闭它,那么使用相同的互斥体来防止它们互相混乱:
void foo_one(){
lock(foo_mutex);
//open file abc.txt
//write into file
//close file
unlock(foo_mutex);
}
void foo_two(){
lock(foo_mutex);
//open file abc.txt
//write into file
//close file
unlock(foo_mutex);
}
Run Code Online (Sandbox Code Playgroud)
当然,这是假设这些是唯一的作家。如果其他线程或进程写入该文件,锁定文件可能是个好主意。
归档时间: |
|
查看次数: |
11152 次 |
最近记录: |