void g() { time_point t0 = Clock::now(); m.lock_shared(); time_point t1 = Clock::now(); m.unlock_shared(); ns d = t1 - t0; assert(d < Tolerance); // within tolerance }
/** * lookup method: just traverse the list in order, and see if we find the * val */ bool lookup(int val) { mtx.lock_shared(); Node* curr = sentinel->next; while (curr != NULL) { if (curr->val >= val) break; curr = curr->next; } bool tmp = ((curr != NULL) && (curr->val == val)); mtx.unlock_shared(); return tmp; }
int main() { m.lock(); std::vector<std::thread> v; for (int i = 0; i < 5; ++i) v.push_back(std::thread(f)); std::this_thread::sleep_for(WaitTime); m.unlock(); for (auto& t : v) t.join(); m.lock_shared(); for (auto& t : v) t = std::thread(g); std::thread q(f); std::this_thread::sleep_for(WaitTime); m.unlock_shared(); for (auto& t : v) t.join(); q.join(); }