2014-02-20 28 views
0

我一直在編寫一個存儲文件輸出的多線程模擬。到目前爲止,我從一開始就將一個文件分配給了核心(使用ofstream myfiles[NUMBER_OF_CORES]),但由於我正在使用多個具有20個核心的計算機,所以這有點麻煩。我一直在做的是避免使用,如果一個文件overheading,但我可以使用類似的每個核心,並最終流,使用類似:在單個文件中寫入幾個核心?

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

開始用CORE_STREAM[NUMBER_OF_CORES]陣列?我從來沒有用這種方式操縱過流。如果存在,我應該構建哪個類?

回答

1

您可以使用ostringstream將中間結果存儲在內存中。像ofstream一樣,它實現了ostream接口,因此您現有的代碼可能會按原樣工作。

要將一個流轉儲到另一個流上,您應該執行myfile << core_stream[i].rdbuf()。 =讀緩衝區

1

您是否考慮過使用ZMQ管道?您的仿真線程可能會寫入ZMQ_PUSH套接字(請參閱zmq_socket(3)),而無論寫入文件(另一個線程或進程,ZMQ不在意)是否可以從ZMQ_PULL套接字讀取。這樣,你的模擬線程就可以在沒有在內存中存儲結果的情況下,擺脫阻塞IO的作用。我無法想象現在在分佈式計算項目上工作而不使用ZMQ。