全てのメモリに対して、 lockset を全集合で初期化して始めて、アクセス時に取られている lock 群と & を取っていって、複数スレッドからアクセスがあって空集合になったら race (rwlock とかは略)
false negative は無い(たぶん)が false positive がたくさん出る
vector<int> vecs(N);
init(&vecs);
vector<thread> threads;
for (int i = 0; i < N; ++i) {
threads.push_back([&]() { vecs[i] = compute(i) });
}
for (thread& th : threads) th.join();
auto result = collect(vecs);
init/collect はロック取ってないのでエラーが出てしまう