我一直在编写基于 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
}
问题是代码不是线程安全的。如果我在这里添加一个互斥锁来保护代码,它会被正确使用,因为它将被构造然后立即在 TraceLogger 构造函数中使用?
我们是一家 windows VS2008 商店(也就是说,没有可用的 std::mutex ),并且正在使用自制的线程锁定代码。我试过用这个,它似乎不起作用。
有什么标准方法可以做到这一点吗?
谢谢,保罗