#include <rlocks.h> typedef char stream_bool_t;
class stream_MT { public: enum { unsafe_object=0, safe_object=1 }; stream_MT(); stream_MT(stream_bool_t); stream_bool_t test_safe_flag(); void set_safe_flag(stream_bool_t); friend class stream_locker; };
クラス stream_MT は、LibC 内の iostream クラスをマルチスレッド環境で正しく機能させるための基底クラスです。クラス ios と streambuf は stream_MT から派生しています。
iostream オブジェクトのマルチスレッド (MT) 安全性は、メンバー関数 set_safe_flag() を使用し、安全フラグを設定して、動的に変更できます。stream_MT::safe_object の値の引数は、iostream オブジェクトを MT-安全に設定し、stream_MT::unsafe_object の値の引数は、オブジェクトを MT-非安全に設定します。iostream オブジェクトの現在の状態はメンバー関数 test_safe_flag() によって判断できます。iostream オブジェクトが MT-安全の場合、そのオブジェクトの内部ロックに関連する一定の量のオーバーヘッドが発生します。オーバーヘッドは、安全フラグをゼロに設定して内部ロックを無効にすることで、避けることができます。
デフォルトで、クラスオブジェクトの safe_flag は stream_MT::safe_object に設定されます。
デフォルトは、安全フラグの値を明示的に指定することで変更できます。
stream_bool_t test_safe_flag();
安全フラグの現在の値を返します。stream_MT::unsafe_object 以外の値は iostream オブジェクトが MT-安全で、ロックが有効であることを示します。
void set_safe_flag(stream_bool_t);
iostream オブジェクトの内部安全フラグを引数で指定された値に設定します。値をゼロ以外に設定するとロックが有効になり、オブジェクトは MT-安全になります。値をゼロに設定すると、その逆になります。
『C++ ライブラリリファレンス』、第 4 章「マルチスレッド環境での従来型の iostreams ライブラリの使用」