可以通过派生新类来扩展 或专用化 iostream 类的功能。如果将在多线程环境中使用从派生类实例化的对象,则这些类必须是 MT 安全类。
通过保护对象的内部状态不会被多线程修改来使类对象成为 MT 安全对象。为此,应使用互斥锁序列化对受保护的公共成员函数中成员变量的访问。
通过在 stream_locker 对象定义的关键区中使用 streambuf 的成员函数 _unlocked 来避免锁定开销。
在应用程序直接调用函数情况下,锁定 streambuf 类的公共虚拟函数。这些函数包括: xsgetn、underflow、pbackfail、xsputn、overflow、seekoff 和 seekpos。
使用 ios 类中的成员函数 iword 和 pword 来扩展 ios 对象的格式化状态。但如果多个线程共享 iword 或 pword 函数的相同索引,将会出现问题。要使线程成为 MT 安全线程,请使用适当的锁定方案。
锁定返回的成员变量的值大于 char 的成员函数。