<< 31/34 >>
First Last

lockset algorithm

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