Tag: 种族条件

Helgrind(Valgrind)和OpenMP(C):避免误报?

Valgrind线程错误检测工具Helgrind的文档,在这里find 警告说,如果你使用GCC编译你的OpenMP代码,GCC的OpenMP运行时库( libgomp.so )会导致数据争用的错误报告混乱,因为它使用primefaces机器指令和Linux futex系统调用而不是POSIX pthreads基元。 它告诉你可以通过使用–disable-linux-futexconfiguration选项重新编译GCC来解决这个问题。 所以我试了一下 我使用–disable-linux-futexconfiguration选项编译并安装到本地目录( 〜/ GCC_Valgrind / gcc_install )一个新的GCC版本4.7.0(本文最新版本)。 然后,我创build了一个小的OpenMPtesting程序( test1.c ),它没有可见的数据竞争: /* test1.c */ #include <omp.h> #include <stdio.h> #include <stdlib.h> #define NUM_THREADS 2 int a[NUM_THREADS]; int main(void) { int i; #pragma omp parallel num_threads(NUM_THREADS) { int tid = omp_get_thread_num(); a[tid] = tid + 1; } for (i = 0; […]

为什么代码在线程间变化共享variables显然不会受到竞争条件的影响?

我正在使用Cygwin GCC并运行此代码: #include <iostream> #include <thread> #include <vector> using namespace std; unsigned u = 0; void foo() { u++; } int main() { vector<thread> threads; for(int i = 0; i < 1000; i++) { threads.push_back (thread (foo)); } for (auto& t : threads) t.join(); cout << u << endl; return 0; } 用下列g++ -Wall -fexceptions […]