Sun Studio 12: C++ ユーザーズガイド

11.4.7 オブジェクトの破棄

複数のスレッドの間で共有される iostream オブジェクトを削除するには、サブスレッドがそのオブジェクトの使用を終えていることを、メインスレッドで確認する必要があります。共有オブジェクトを安全に破棄する方法を次に示します。


例 11–12 共有オブジェクトの破棄


#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 オブジェクトを削除
}