複数のスレッドの間で共有される 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 オブジェクトを削除 } |