我目前正在嘗試編寫併發隊列,但我有一些段錯誤,我無法向自己解釋。我的隊列實現本質上是由本網站上的第一個列表給出的。併發隊列中的競爭條件
該網站說,有一個競爭條件,如果對象是並行地從隊列中刪除,但我只是不明白爲什麼還有一個,任何人都可以解釋給我嗎?
編輯:這是代碼:
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();
}
};
那裏有一個以上的代碼片段,他們說哪一個代碼片段有比賽? – hmatar
...細節在這裏非常重要。請發佈您正在使用的實際代碼。 – Mat
他的意思是實現*阻塞*併發隊列。如果隊列在使用時試圖從中彈出項目,那該怎麼辦? – Nawaz