Valgrind在不应该报告竞争状态时报告竞争状态



我用Valgrindhelgrind工具测试了一个应用程序的竞态条件。但是它报告了一个由锁保护的代码的竞争。是Valgrind错误地报告这是竞争条件,还是我错过了一些东西。代码如下:

    pthread_mutex_lock(&G_Memory->lock_array[pb->exp_lock_index]);
    pb->subtree_cost += b->subtree_cost;
    pb->interaction_synch += 1; // <--- race here (cost_zones.c:91)
    pthread_mutex_unlock(&G_Memory->lock_array[pb->exp_lock_index]);

Valgrind/Helgrind报告如下

==29768== Possible data race during read of size 8 at 0x56bf8e0 by thread #4
==29768==    at 0x404C51: ComputeSubTreeCosts (cost_zones.c:91)
          ...................
==29768==  This conflicts with a previous write of size 8 by thread #1
==29768==    at 0x404C5F: ComputeSubTreeCosts (cost_zones.c:91)
          ...................

从你在评论中的描述来看,你遗漏了一些东西。这里有一个竞争条件,因为线程使用不同的互斥锁。您的线程必须在这里使用相同的互斥锁,以便代码仅在获得唯一的锁时执行。

相关内容

  • 没有找到相关文章

最新更新