全てのメモリに対して、 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 はロック取ってないのでエラーが出てしまう