#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 派生的。
可以通过使用成员函数 set_safe_flag() 设置一个安全标志动态更改 iostream 对象的多线程 (multi-thread, MT) 安全性。值为 stream_MT::safe_object 的参数将 iostream 对象设置为多线程安全的,值为 stream_MT::unsafe_object 的参数将对象设置为多线程不安全的。可以通过成员函数 test_safe_flag() 确定 iostream 对象的当前状态。当 iostream 对象为多线程安全对象时,存在与对象中的内部锁定相关的一定数量的开销。可以通过将安全标志设置为零(这将禁用内部锁定)来避免此开销。
缺省情况下,类对象的 safe_flag 设置为 stream_MT::safe_object。
可以通过为安全标志提供显式值更改缺省值。
stream_bool_t test_safe_flag();
返回安全标志的当前值。stream_MT::unsafe_object 之外的值指示 iostream 对象是多线程安全对象并且将启用锁定。
void set_safe_flag(stream_bool_t);
将 iostream 对象的内部安全标志设置为作为参数提供的值。将值设置为非零值将启用锁定并使对象成为多线程安全对象。将值设置为零将执行相反的操作。
《C++ Library Reference》中的第 4 章 "Using Classic iostreams in a Multithreaded Environment"。