複数のスレッドで共有する iostream オブジェクトを削除するときは、すべての副スレッドがそのオブジェクトの使用を終了していることを、主スレッドで確認する必要があります。次の例で、共有オブジェクトを安全に破壊する方法を示します。
#include <fstream.h>
#include <thread.h>
fstream* fp;
void *process_rtn(void*)
{
// fp を使用する副スレッドの本体...
}
multi_process(const char* filename, int numthreads)
{
fp = new fstream(filename, ios::in); // スレッド生成の前に
// fstream オブジェクトを生成
// スレッドの生成
for (int i=0; i<numthreads; i++)
thr_create(0, STACKSIZE, process_rtn, 0, 0, 0);
// 全スレッドの終了待ち
for (int i=0; i<numthreads; i++)
thr_join(0, 0, 0);
delete fp; // 全スレッドの終了後に
fp = NULL; // fstream オブジェクトを破壊
}