小编use*_*062的帖子

为什么valgrind(helgrind)生成"可能的数据竞争",以防我的线程结构调用虚函数

当我开始学习valgrind(helgrind)工具时,我遇到了一个我未能解决的问题.

简单地说,用虚拟函数创建一个用户定义的线程类,该函数将由线程的入口例程调用.如果是这种情况,helgrind将报告Possible-data-race.但是在简单地省略虚拟关键字之后,就不会报告这样的错误.怎么会这样发生?我的代码有什么问题吗?或者有解决方法吗?

以下是演示此类问题的简单线程应用程序,包括cpp,Makefile和helgrind报告的消息.

/* main.cpp */
#include <memory.h>
#include <pthread.h>

class thread_s {
public:
  pthread_t       th;
  thread_s(void);
  ~thread_s(void);
  virtual void* routine(); /* if omit virtual, no error would be generated */
  void stop(void);
};
static void* routine(void*);
int main(int, const char*[])
{
  thread_s s_v;
  pthread_create(&s_v.th, 0, routine, &s_v);
  return 0;
}
static void* routine(void* arg)
{
  thread_s *pV = reinterpret_cast<thread_s*>(arg);
  pV->routine();
  return 0;
}
void* thread_s::routine(void)
{
  return 0;
}
thread_s::thread_s(void)
{
  th = 0;
}
thread_s::~thread_s(void)
{
  stop();
} …
Run Code Online (Sandbox Code Playgroud)

c++ valgrind

5
推荐指数
1
解决办法
5233
查看次数

标签 统计

c++ ×1

valgrind ×1