So I'm trying to get some throughput measurements on an I/O library I'm working on, and I'm currently testing a synchronous mode so that I need two threads, one to read data and one to write. The code is quite simple: template <typename T> void sync_read_loop(pf_istream *in_sock, T *buffer, uint32_t iters) { for (int ii=0; ii < iters; ii++) { (*in_sock) >> buffer; } } template <typename T> void sync_write_loop(pf_ostream *out_sock, T *buffer, uint32_t iters) { for (int ii=0; ii < iters; ii++) { (*out_sock) << buffer; } } template <typename T> void TEST_READ_WRITE(const char* msg, t_pf_type pf_type, bool &all_passed, T (*randnum)(), bool throughput, bool sync) { const size_t BUFF_SIZE = 1024*1024; const size_t ITERS = 32; T* write_buffer = (T*)(new char[BUFF_SIZE*sizeof(T)]); T* read_buffer = (T*)(new char[BUFF_SIZE*sizeof(T)]); if (sync) {