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();
}
L'exécution est exécutée par boost :: thread. L'exécution est appelée par l'unité d'exécution du programme principal pour mettre en file d'attente une opération. Cependant, il se bloque après le réveil de l'attente conditionnelle.condition de suralimentation. Qu'est-ce que je fais mal?
Qu'est-ce que je fais mal?
btw, vous devriez donner à vos variables de condition un nom plus descriptif – sellibitze
btw2, est-il intentionnel, que le mutex soit toujours verrouillé pendant que la fonction q-> execute() est exécutée? – sellibitze
Je ne vois rien de mal à cela. L'erreur pourrait être ailleurs. – sellibitze