我正在尝试编写一个多生产者,多用户队列.我在Arch Linux上使用G ++ 4.6,它也打破了G ++ 4.7.
#include <atomic>
#include <condition_variable>
#include <memory>
#include <mutex>
#include <vector>
#include <iostream>
#include <string>
#include <sstream>
template <typename T> class concurrent_queue
{
public:
concurrent_queue(size_t n) : items(n), item_states(n), producer_index(0), consumer_index(0) {
}
virtual ~concurrent_queue () {
}
T * consume() {
auto index = consumer_index;
T * item = nullptr;
state_t state = USED;
// Extract item and block location.
while (!item_states[index].compare_exchange_strong(state, BLOCKED, std::memory_order_acquire, std::memory_order_acquire)) {
// Wait for an item to become available …
Run Code Online (Sandbox Code Playgroud)