为什么valgrind drd认为pthread_barrier_wait有问题?

时间:2012-07-19 15:51:53

标签: pthreads valgrind

当我运行以下超简单程序时,我在valgrind drd中检测到错误。 这是谁的错误?并行线程? Valgrind的?我吗?

#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;
}

当我编译&amp;个人资料:

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 个答案:

答案 0 :(得分:1)

效果很好。我在Linux Mint 13上使用valgrind-3.7.0和gcc(Ubuntu / Linaro 4.6.3-1ubuntu5)4.6.3。