几个核心写在一个文件中?

时间:2014-02-20 12:38:22

标签: c++ file stream

我一直在编写一个多线程模拟,将输出存储在文件中。到目前为止,我已经从一开始就将一个文件分配给核心(带有ofstream myfiles[NUMBER_OF_CORES]),但是由于我正在使用具有20多个核心的多台计算机,因此它有点混乱。如果使用一个文件,我一直这样做是为了避免过头,但是我可以使用类似每个核心的流程,最后使用类似的东西:

for(int i =0; i < NUMBER_OF_CORES; i++){
  myfile << CORE_STREAM[i];
  }

CORE_STREAM[NUMBER_OF_CORES]数组开始?我从来没有以这种方式操纵流。如果它存在,我应该构建哪个类?

2 个答案:

答案 0 :(得分:1)

您可以使用ostringstream将中间结果存储在内存中。与ofstream类似,它实现了ostream接口,因此您现有的代码可能会按原样运行。

要将一个流转储到另一个流上,您需要执行myfile << core_stream[i].rdbuf()。 =读取缓冲区

答案 1 :(得分:1)

您是否考虑使用ZMQ管道?您的模拟线程可以写入ZMQ_PUSH套接字(请参阅zmq_socket(3))以及写入文件的任何内容(另一个线程或进程,ZMQ不关心)可以从ZMQ_PULL套接字读取。这样,您的模拟线程可能会在不将结果存储在内存中的情况下完成任何阻塞IO。我现在无法想象在分布式计算项目上工作而不使用ZMQ。