J'essaie actuellement d'écrire une file d'attente simultanée, mais j'ai des erreurs de segment que je ne peux pas m'expliquer. L'implémentation de ma file d'attente est essentiellement donnée par la première annonce sur ce site.Condition de course dans une file d'attente simultanée
Le site dit qu'il ya une condition de course si les objets sont retirés de la file d'attente en parallèle, mais je ne vois pas pourquoi il y en a un, quelqu'un pourrait-il me l'expliquer?
Edit: Voici le code:
template<typename Data>
class concurrent_queue
{
private:
std::queue<Data> the_queue;
mutable boost::mutex the_mutex;
public:
void push(const Data& data)
{
boost::mutex::scoped_lock lock(the_mutex);
the_queue.push(data);
}
bool empty() const
{
boost::mutex::scoped_lock lock(the_mutex);
return the_queue.empty();
}
Data& front()
{
boost::mutex::scoped_lock lock(the_mutex);
return the_queue.front();
}
Data const& front() const
{
boost::mutex::scoped_lock lock(the_mutex);
return the_queue.front();
}
void pop()
{
boost::mutex::scoped_lock lock(the_mutex);
the_queue.pop();
}
};
Il y a plus d'un extrait de code là-bas, lequel dit-on avoir une course? – hmatar
... et les détails sont extrêmement importants ici. S'il vous plaît poster le code que vous utilisez. – Mat
il voulait implémenter * bloquer * la file d'attente concurrente. Que faire si la file d'attente est vide au moment où ils essaient d'en faire sortir un objet? – Nawaz