helgrind
のツールを使用して、競合状態のアプリケーションをテストしましたValgrind
。しかし、それはロックによって保護されているコードの競争を報告しました。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)
...................