void runTryEnqDeqThread( int numThreads, int n, /*numOps*/ MPMCQueue<int, Atom>& cq, std::atomic<uint64_t>& sum, int t) { uint64_t threadSum = 0; int src = t; // received doesn't reflect any actual values, we just start with // t and increment by numThreads to get the rounding of termination // correct if numThreads doesn't evenly divide numOps int received = t; while (src < n || received < n) { if (src < n && cq.write(src)) { src += numThreads; } int dst; if (received < n && cq.read(dst)) { received += numThreads; threadSum += dst; } } sum += threadSum; }
void testTimeout(MPMCQueue<int, std::atomic, Dynamic>& q) { CHECK(q.write(1)); /* The following must not block forever */ q.tryWriteUntil( std::chrono::system_clock::now() + std::chrono::microseconds(10000), 2); }