问题:智能解决方案
我开发与升压服务器,并有从一些数据由主线程在初始化加载XML文件。
在执行过程中可能会发生一些变化,应该存储在xml文件中。为此函数存储()中的一类叫做数据库实现:
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写呢不会崩溃。
问题:
- 是否有此类问题的更有效或更好的解决方案或这是正确的方式?
我读这个主题,它看起来很有趣,也适用于每个连接一个线程。 –
最好的方法是使用线程池。如果您的服务器需要处理大量不同的连接(例如处理1000个呼叫的VOIP交换机),则每个连接产生一个线程不会扩展。提供'boost :: asio'的例子涵盖了简单和复杂的情况,不幸的是一些更复杂的情况没有解释/记录。这里有一些优秀的资源,它们解释了用'boost :: asio'开发多线程服务器的不同技术。恕我直言'boost :: asio'是我用过的最好的书面/最可用的C++库之一。 – mark