【问题标题】:Why does valgrind drd think pthread_barrier_wait is buggy?为什么 valgrind drd 认为 pthread_barrier_wait 有问题?
【发布时间】:2012-07-19 15:51:52
【问题描述】:

当我运行以下超级简单的程序时,我在 valgrind drd 中检测到错误。 是谁的错?线程?瓦尔格林?我?

#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== 线程 1 在 0x00601088 大小 4 的负载冲突 ==28089== 在 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

【问题讨论】:

    标签: pthreads valgrind


    【解决方案1】:

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

    【讨论】:

    • 我应该考虑尝试更新的 valgrind(我的测试是使用 valgrind 3.6.1,就像 OP 一样)。 valgrind 3.7.0 没有显示错误。
    • 确实如此。这似乎已在较新的版本中得到修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 2012-07-17
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多