【发布时间】:2020-12-07 17:41:12
【问题描述】:
需要创建巨大的 (>10 Gb) 文本文件,其中每一行都是一个很长的数字,基本上是一个字符串,因为像 unsigned long long 这样的偶数类型是不够的。所以我将使用随机生成器,但首先创建多个线程可能是个好主意。据我所知,每个线程一次只写一行,这在 C++ 中被认为是线程安全的操作。
这是一个好主意还是我错过了什么,最好从一个线程逐行编写?
【问题讨论】:
-
这里的瓶颈是IO操作而不是CPU操作,所以在这里添加线程是没有意义的。
-
你在
std::ofstream中使用<<操作符? -
随机数:不是线程安全的。流 IO:不是线程安全的。写入同一个文件是有争议的(相同的资源)并且会导致过度阻塞。您的 IO 设备有多快?在设备跟不上之前有多少线程写入设备?
-
总之...没有。
-
除非它的文档明确声明某些东西是线程安全的,否则它不会是线程状态的。 C++ 中几乎没有什么是线程安全的。大多数时候你不需要线程安全,那么为什么要为你可能不使用的东西付出代价呢?相反,使用thread support library 中的工具,几乎所有东西都相对容易包装或以其他方式保护。
标签: c++ multithreading file c++11