Link to zip of an example Windows dos console multi-threaded app that copies a file.

The existing thread is used to read the source file, and a spawned thread is used to write the destination file. There's a pool of linked list elements that contain pointers to buffers and byte count.

There's some overhead in setting up the mutexes and semaphores, but the actual code in the threads is small. The code for the messaging (append to list, get first element from list) is also small. Windows has a WaitForMultipleObjects() that is used to eliminate any issues related to the priority of the sending and receiving threads.