- 161 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 14:24:45 ]
- >>155
使っているlibc++がマルチスレッド対応してるなら(今時なら普通してると思うが) istream/ostreamの関数呼び出しの単位で排他してくれてるはずだ。 つまり、例えばあるスレッドでoperator<<()が呼ばれた場合、その間は streambufがロックされるので、streambufの内部状態が壊されることが無い。 ヘルプなどのドキュメントに明記されていないなら、ソースを読むんだね。 ただ、排他はあくまで関数呼び出し単位なので、例えば ofs << n << ":" << s << endl; のようなことをやっているコードでは、operator<<()が4回呼ばれている間に 他のスレッドからの出力が割り込む可能性は当然あって、その場合は 出力がぐじゃぐじゃになる。 それを避けたければ、常に1行単位で出力関数を呼ぶようにするとよいだろう。 無論自前で排他をするという手もあるが。
|

|