RAII に基づいて、C++ メソッドのエントリ/終了ロガーを作成しています。使用法は次のようなものです。
void Class::Method()
{
METHOD_NAME( "Class::Method" ); // I know: I could use __FUNCTION__ instead ;<)
…
}
ロガー クラス:
#define METHOD_NAME(name) TraceLogger _traceLog(name);
TraceLogger::TraceLogger( const std::string& theContext )
{
<lock mutex here>
// Trace logging code here
}
TraceLogger::~TraceLogger()
{
<lock mutex here>
// Trace logging code here
}
問題は、コードがスレッドセーフでないことです。コードを保護するためにここにミューテックスを追加すると、正しく使用されますか?
私たちは Windows VS2008 ショップ (つまり、使用可能な std::mutex はありません) であり、自家製のスレッド ロック コードを使用しています。これを使ってみましたが、うまくいかないようです。
これを行う標準的な方法はありますか?
ありがとう、ポール