rename atomic queue io function.
| | |
| | | size_type tail() const { return tail_.load(); } |
| | | bool like_empty() const { return head() == tail() && Empty(buf[head()]); } |
| | | bool like_full() const { return head() == tail() && !Empty(buf[head()]); } |
| | | bool push_back(const Data d, bool try_more = false) |
| | | bool push(const Data d, bool try_more = false) |
| | | { |
| | | bool r = false; |
| | | size_type i = 0; |
| | |
| | | } while (try_more && !r && ++i < capacity); |
| | | return r; |
| | | } |
| | | bool pop_front(Data &d, bool try_more = false) |
| | | bool pop(Data &d, bool try_more = false) |
| | | { |
| | | bool r = false; |
| | | Data cur; |
| | |
| | | } while (steady_clock::now() < end_time); |
| | | return false; |
| | | } |
| | | bool TryRead(Data &d, const bool try_more = true) { return queue_.pop_front(d, try_more); } |
| | | bool TryWrite(const Data d, const bool try_more = true) { return queue_.push_back(d, try_more); } |
| | | bool TryRead(Data &d, const bool try_more = true) { return queue_.pop(d, try_more); } |
| | | bool TryWrite(const Data d, const bool try_more = true) { return queue_.push(d, try_more); } |
| | | |
| | | private: |
| | | robust::AtomicQueue<Power, Data> queue_; |
| | |
| | | |
| | | Rcb tmp; |
| | | BOOST_CHECK(tmp.like_empty()); |
| | | BOOST_CHECK(tmp.push_back(1)); |
| | | BOOST_CHECK(tmp.push(1)); |
| | | BOOST_CHECK(tmp.tail() == 1); |
| | | BOOST_CHECK(tmp.head() == 0); |
| | | int64_t d; |
| | | BOOST_CHECK(tmp.pop_front(d)); |
| | | BOOST_CHECK(tmp.pop(d)); |
| | | BOOST_CHECK(tmp.like_empty()); |
| | | BOOST_CHECK(tmp.head() == 1); |
| | | BOOST_CHECK(tmp.tail() == 1); |
| | |
| | | auto Writer = [&]() { |
| | | uint64_t n = 0; |
| | | while ((n = nwrite++) < nmsg) { |
| | | while (!rcb->push_back(n, try_more)) { |
| | | while (!rcb->push(n, try_more)) { |
| | | // MySleep(); |
| | | } |
| | | ++writedone; |
| | |
| | | auto Reader = [&]() { |
| | | while (nread.load() < nmsg) { |
| | | int64_t d; |
| | | if (rcb->pop_front(d, try_more)) { |
| | | if (rcb->pop(d, try_more)) { |
| | | ++nread; |
| | | total += d; |
| | | } else { |