#include #include #include #include #include #include using std::chrono::nanoseconds; using std::chrono::steady_clock; int init() { int n = 0; std::cin >> n; return n; } int main() { std::vector send_time; std::vector recv_time; std::vector received; int n = init(); if (n <= 0) { std::cerr << "n must be positive\n"; return 1; } received.resize(n); send_time.resize(n); recv_time.resize(n); THWeaver::EndpointQueue queue; queue.init(); std::thread producer([&]() { for (int i = 0; i < n; ++i) { while (queue.send(static_cast(i + 1)) != THWeaver::EndpointQueueSendResult::Ok) { } send_time[i] = steady_clock::now(); } }); std::thread consumer([&]() { for (int i = 0; i < n; ++i) { uint64_t value = 0; while (queue.recv(value) != THWeaver::EndpointQueueRecvResult::Ok) { } recv_time[i] = steady_clock::now(); received[i] = value; } }); producer.join(); consumer.join(); for (int i = 0; i < n; ++i) { uint64_t expected = static_cast(i + 1); if (received[i] != expected) { std::cerr << "mismatch at " << i << ": expected " << expected << ", got " << received[i] << "\n"; return 1; } } for (int i = 0; i < n; ++i) { nanoseconds duration = std::chrono::duration_cast( recv_time[i] - send_time[i]); std::cout << (i + 1) << "," << duration.count() << "\n"; } return 0; }