1

次の非常に単純なプログラムを実行すると、valgrind drd でエラーが検出されます。誰のミスですか?pスレッド?ヴァルグリンド?自分?

#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== 0x00601088 サイズ 4 でのスレッド 1 による負荷の競合
==28089== at 0x4E44E9E: pthread_barrier_wait (pthread_barrier_wait.S:40)
==28089== by 0x40079B: メイン (testbar.c:24)
...

私はUbuntu 11.10 x86_64を使用しています。valgrind-3.6.1-Debian と gcc 4.6.1-9ubuntu3 の使用

4

1 に答える 1

1

それはうまくいきます。Linux Mint 13 で valgrind-3.7.0 と gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 を使用しています。

于 2012-07-26T05:08:41.680 に答える