複数のスレッドの間で共有される iostream オブジェクトを削除するには、サブスレッドがそのオブジェクトの使用を終えていることを、メインスレッドで確認する必要があります。共有オブジェクトを安全に破棄する方法を次に示します。
#include <fstream.h>
#include <thread.h>
fstream* fp;
void *process_rtn(void*)
{
// fp を使用するサブスレッドの本体...
}
void 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 オブジェクトを削除
}
|