1
当我运行下面的超简单程序时,我在valgrind drd中检测到错误。 这是谁的错误?并行线程? Valgrind的?我?为什么valgrind drd认为pthread_barrier_wait是越野车?
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
pthread_barrier_t barrier1;
void * wait_for_barrier(void *args)
{
pthread_barrier_wait(&barrier1);
return 0;
}
int main (int argc, char *argv[])
{
pthread_t t;
pthread_barrier_init(&barrier1, NULL, 2);
pthread_create(&t, NULL, wait_for_barrier, 0);
wait_for_barrier(NULL);
pthread_join(t, NULL);
return 0;
}
当我编译&轮廓搭配:
gcc testbar.c -O3 -g -lpthread && valgrind --tool=drd ./a.out
我看到
... ==28089== Conflicting load by thread 1 at 0x00601088 size 4 ==28089== at 0x4E44E9E: pthread_barrier_wait (pthread_barrier_wait.S:40) ==28089== by 0x40079B: main (testbar.c:24) ...
我在Ubuntu 11.10 x86_64的。使用valgrind-3.6.1-Debian和gcc 4.6.1-9ubuntu3
我应该考虑尝试更新的valgrind(我的测试是使用valgrind 3.6.1像OP)。 valgrind 3.7.0显示没有错误。 – 2012-07-26 22:52:04