Yes, at least with Clang this is relatively easy. You'll need to build libomp (which Clang uses instead of libgomp) with ThreadSanitizer support. This doesn't take that long:
git clone https://github.com/llvm/llvm-project
cd llvm-project
mkdir build
cd build
cmake -DLIBOMP_TSAN_SUPPORT=1 ../openmp
sudo cmake --build . --target install
(sudo
and --target install
is optional if you adjust the path to libomp.so
below)
Now running your example works without any errors if you use this libomp.so
instead of the system one:
clang++ -fsanitize=thread -fopenmp main.cpp
env LD_PRELOAD=/usr/local/lib/libomp.so ./a.out
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…