iostream クラスから新たなクラスを派生させて、機能を拡張したり特殊化したりすることができます。派生クラスのオブジェクトをマルチスレッド環境で使用するときは、派生クラスも「MT-安全」にする必要があります。
「MT-安全」のクラスを派生するときには、次の点を考慮してください。
クラスオブジェクトを「MT-安全」にするには、オブジェクトの内部状態が複数のスレッドから変更されないようにします。そのためには、公開になっているメンバー変数へのアクセス、および相互排他ロックによって保護されているメンバー関数へのアクセスが直列になるようにします。
「MT-安全」の基底クラスのメンバー関数に対する呼び出し順を不可分にするには、stream_locker オブジェクトを使用します。
ロックに伴うオーバーヘッドを避けるには、stream_locker オブジェクトで定義された危険領域内では、streambuf のメンバー関数のうち _unlocked のものを使用します。
streambuf クラスの公開仮想関数がアプリケーションから直接呼び出される場合は、それらの関数をロックします 。そのような関数としては、xsgetn、underflow、pbackfail、xsputn、overflow、seekoff、seekpos があります。
ios オブジェクトのフォーマット状態を拡張するには、ios クラスのメンバー関数 iword と pword を使用します。ただし、複数のスレッドが関数 iword または pword への同じインデックスを共有する場合は問題が起こります。複数のスレッドを「MT-安全」にするには、適切なロックを使用してください。
char 型よりサイズが大きいメンバー変数の値を返すようなメンバー関数は、ロックする必要があります。