boost::condition_variable cond;
boost::mutex mut;
void Database::run()
{
boost::unique_lock<boost::mutex> lock(mut);
while(true)
{
while(queries_queue.empty())
cond.wait(lock);
mysqlpp::Query* q = queries_queue.front(); // <<< CRASHES HERE <<<
q->execute();
queries_queue.pop_front();
}
}
void Database::Execute(mysqlpp::Query* q)
{
{
boost::lock_guard<boost::mutex> lock(mut);
queries_queue.push_back(q);
}
cond.notify_one();
}
run 由 boost::thread 执行。Execute 由主程序线程调用以对操作进行排队。但是,它在从条件等待中唤醒后崩溃。
我究竟做错了什么?