ブーストを使用してマルチスレッド C++ コードのロガーを作成しようとしています。これが私のコードです:
class logger
{
private:
boost::mutex logMtx;
public:
logger()
{
}
~logger()
{
}
void logString(string z)
{
boost::mutex::scoped_lock lock(logMtx);
std::cout<<z<<std::endl;
std::cout.flush();
}
};
次に、このインスタンスを複数のスレッドで共有し (インスタンスは他のスレッドを作成する前にメイン スレッドで作成されます)、ログ記録のために logString 関数を呼び出します。うまくいかないようです。一部の行が切り捨てられます (文字列全体が印刷されません。つまり、"abcd" を渡すと、"bcd" が印刷されることがあります)。
このアプローチに何か問題がありますか?