2012-07-19 57 views
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

回答

1

它运行良好。我在Linux Mint 13上使用了valgrind-3.7.0和gcc(Ubuntu/Linaro 4.6.3-1ubuntu5)4.6.3。

+0

我应该考虑尝试更新的valgrind(我的测试是使用valgrind 3.6.1像OP)。 valgrind 3.7.0显示没有错误。 – 2012-07-26 22:52:04