0

ここに小さなプログラム例があります:

#include <execution>
#include <vector>

using namespace std;

int main() {
  vector<const char *> my_vector{"some", "words", "here"};
  for_each(execution::par, my_vector.begin(), my_vector.end(),
           [&](const char *s) {
             // do nothing here
           });
}

私はそれを(現在のArch Linuxで)次のようにコンパイルします:

g++ -std=c++20 -ltbb -fsanitize=thread test.cc

このプログラムは書き込みを行わないため、どのようにデータ競合が発生するか想像できませんが、TSan は非常に不満です。エラーの激流は次のように始まります。

WARNING: ThreadSanitizer: data race (pid=124291)                                                                                                                                                 Write of size 8 at 0x7f620b79b900 by thread T6:                                                                                                                                                  #0 memset /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:778 (libtsan.so.0+0x37449)                                                                    
    #1 memset /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:776 (libtsan.so.0+0x37449)                                                                    
    #2 <null> <null> (libtbbmalloc.so.2+0x13ed6)

これは TSan の単なる誤検知である可能性はありますか?

4

0 に答える 0