Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reimplement frwlock #343

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open

Conversation

kuszmaul
Copy link
Contributor

This pull request contains a rewrite of the fair readers-writers lock (frwlock). The old code had bugs (if a spurious wakeup occured from a pthread_cond_wait, the code would fail.) The old code was also complex. I tried making small changes to improve it, and it just was buggy. I reimplemented it, and ran the test-frwlock-fair-writers test, as well as benchmark-test. I also fixed a race condition by making the m_num_writers variable be an atomic integer (since the cache table queries the number of writers without acquiring the lock)

@leifwalsh
Copy link
Contributor

Well github really mangled that email...

Probably shouldn't use std::queue<...>*, should use std::queue<...> instead.

Also, consider std::queue<frwlock_queueitem, std::list<frwlock_queueitem> >. The default container is a deque which might be slower because everyone has to copy items in to one cache line. A linked list of stack allocated objects might be better.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
3 participants