问题:
我正在使用Boost开发服务器,并且有一个 xml 文件,主线程在初始化时从该文件中加载一些数据。
在执行期间,可能会发生一些更改,应将其存储在 xml 文件中。为此,在名为 Database 的类中实现了函数 store():
Database::store()
{
boost::mutex::scoped_lock lock(_databaseMutex);
//xml file wirting
}
如果我想存储与创建类数据库的主线程不同的另一个线程的更改(例如,套接字连接),xml 将失败,因为它似乎是线程不安全的。
可能的解决方案:
我的想法是在服务器(主线程)中创建一个循环,等待来自其他线程的通知,如下所示:
void loopQueue()
{
boost::mutex::scoped_lock lock(_queueMutex); // close the lock
while(true)
{
while (_queuedActions.empty())
{
_updateAvailable.wait(lock);
}
getDatabase(param)->store(); //stores database
_queuedActions.pop();
}
}
这样 xml 写入不会崩溃。
问题:
- 对于此类问题是否有更有效或更好的解决方案,或者这是正确的方法?