C++ 互斥体上的条件断点未触发
我在多个线程中调用了一个print to stdout函数,所以我对它设置了一个锁。问题是helgrind在保存指向stdout的指针的变量上报告RAC,尽管互斥锁应该被锁定。我的代码如下所示: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
#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);
}