ThreadSanitizer data race when multiple threads write the same value

337 Views Asked by At

I have a program where many threads do some computations and write a boolean true value in a shared array to tag the corresponding item as "dirty". This is a data race, reported by ThreadSanitizer. Nevertheless, the flag is never read from these threads, and since the same value is written by all threads, I wonder if it is an actually problematic data race.

Here is a minimal working example:

#include <array>
#include <cstdio>
#include <thread>
#include <vector>

int
main()
{
  constexpr int N = 64;

  std::array<bool, N> dirty{};
  std::vector<std::thread> threads;
  threads.reserve(3 * N);

  for (int j = 0; j != 3; ++j)
    for (int i = 0; i != N; ++i)
      threads.emplace_back([&dirty, i]() -> void {
        if (i % 2 == 0)
          dirty[i] = true; // data race here.
      });

  for (std::thread& t : threads)
    if (t.joinable())
      t.join();

  for (int i = 0; i != N; ++i)
    if (dirty[i])
      printf("%d\n", i);

  return 0;
}

Compiled with g++ -fsanitize=thread, a data race is reported on the marked line. Under which conditions can this be an actual problem, i.e. the dirty flag for an item i would not be the expected value?

0

There are 0 best solutions below