代码之家  ›  专栏  ›  技术社区  ›  Learning is a mess

多个内核在一个文件中写入?

  •  0
  • Learning is a mess  · 技术社区  · 12 年前

    我一直在编写一个多线程模拟,将输出存储在文件中。到目前为止,我已将一个文件分配给核心(带有 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 回复  |  直到 12 年前
        1
  •  1
  •   MSalters    12 年前

    你可以使用 ostringstream 以将中间结果存储在存储器中。喜欢 ofstream ,它实现 ostream 接口,所以您的现有代码可能会按原样工作。

    把一条小溪倒在另一条小溪上 myfile << core_stream[i].rdbuf() .=读取缓冲区

        2
  •  1
  •   user2460683 user2460683    12 年前

    您是否考虑过使用 ZMQ 管道模拟线程可以写入ZMQ_PUSH套接字(请参见 zmq_socket(3) )并且写入文件的任何内容(另一个线程或进程,ZMQ不在乎)都可以从ZMQ_PULL套接字读取。这样,您的模拟线程就可以避免执行任何阻塞IO,而无需在内存中暂存结果。我无法想象这些天在一个分布式计算项目上工作而不使用ZMQ。