stream_MT(3CC4)

名前
stream_MT - iostream クラスのオブジェクトの MT-safe/MT-unsafe を動的に変化させる基底クラス

形式

#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-safe (マルチスレッド環境で使用しても安全) かどうかは、 メンバー関数 set_safe_flag() を用いてセーフ・フラグをセットすることで動的に変更できます。 iostream オブジェクトは、 stream_MT::safe_object の値を引数に指定すると MT-safe に設定され、 stream_MT::unsafe_object を引数に指定すると MT-unsafe (マルチスレッド環境で使用できない) に 設定されます。

iostream オブジェクトの現在の状態はメンバー関数 test_safe_flag() によって調べることができます。

iostream オブジェクトが MT-safe の場合、 そのオブジェクトの内部ロックによってある量のオーバーヘッドが発生します。 このオーバーヘッドは、セーフ・フラグをゼロに設定して内部ロックをオフにすれば なくすことができます。

  コンストラクタ

stream_MT();
    デフォルトでは、クラス・オブジェクトの セーフ・フラグ ( safe_flag ) が stream_MT::safe_object に設定されます。

stream_MT(stream_bool_t);
    デフォルト値は、セーフ・フラグの値を明示的に設定することで変更できます。

  メンバー関数

stream_bool_ttest_safe_flag();
    セーフ・フラグの現在の値を返します。 戻り値が stream_MT::unsafe_object 以外のとき、 iostream オブジェクトは MT-safe で、ロックはオンになっています。

voidset_safe_flag(stream_bool_t);
    iostream オブジェクトの内部セーフ・フラグを 引数で指定された値に設定します。 ゼロ以外の値を指定するとロックがオンになり、 オブジェクトは MT-safe になります。 ゼロを指定すると、その逆になります。

関連項目
『C++ ライブラリ・リファレンス』の第 4 章「マルチスレッド環境での従来型の iostream ライブラリの使用」