我需要开发一个应用程序,它可以比使用1个线程读取源文件和另一个写入它们的线程更快地复制。源文件和目标文件位于不同的硬盘中。
我的问题是如何将源读取线程的结果传递到目标写入线程而不会导致某些竞争条件,并且仍然保持复制过程的最佳性能,以实现比OS副本更快的复制过程。
答案 0 :(得分:0)
使用有界队列 您可以使用任何队列(TBB,std :: deque,cirtular buffer等等。如果它不是线程安全和/或阻塞,则在其周围进行同步并使用conditional variables进行通知。您不需要队列中的智能技巧,因为将指向一大块数据的指针传递到队列中的速度比I / O快得多,但如果您确实想要过度优化,请检查disruptor(描述here)。
审阅者:请注意,问题是关于在不同硬盘驱动器之间进行复制,因此多线程副本将从中受益。