C++ 互斥体上的条件断点未触发

C++ 互斥体上的条件断点未触发,c++,multithreading,pthreads,C++,Multithreading,Pthreads,我在多个线程中调用了一个print to stdout函数,所以我对它设置了一个锁。问题是helgrind在保存指向stdout的指针的变量上报告RAC,尽管互斥锁应该被锁定。我的代码如下所示: #ifdef ___USE_DBG #define MSG(message) f(message) #else #define MSG(message) #endif void f(message) { lock(&m1); //loc

我在多个线程中调用了一个print to stdout函数,所以我对它设置了一个锁。问题是helgrind在保存指向stdout的指针的变量上报告RAC,尽管互斥锁应该被锁定。我的代码如下所示:

   #ifdef ___USE_DBG
   #define MSG(message) f(message)
   #else 
   #define MSG(message)
   #endif

   void f(message)
   {
       lock(&m1); //lock first observed
       out<<message; //locks held 2 . why? m1 is the only mutex....
       unlock(&m1);
   }
#ifdef_uuu_u_u_u使用DBG
#定义消息(消息)f(消息)
#否则
#定义消息(消息)
#恩迪夫
f(信息)
{
lock(&m1);//首先观察到锁

out我在type2_线程中发现了一个双锁,如果这对您有帮助,另一方面,您必须确保所有互斥锁都正确初始化

type2_thread{
    <loop everything until something happens>
    lock(&m3);
    ...
    MSG(something_else);
/////lock(&m3);    
unlock(&m3);
}
type2\u螺纹{
锁(m3和m3);
...
味精(其他东西);
/////锁(m3和m3);
解锁(&m3);
}

大概,“out”已经有锁了。
out
是指向
std::cout
(代码有点不同)这是一个打字错误抱歉,它实际上是解锁(&m3),我无法复制粘贴我的代码。
type2_thread{
    <loop everything until something happens>
    lock(&m3);
    ...
    MSG(something_else);
/////lock(&m3);    
unlock(&m3);
}