-
Notifications
You must be signed in to change notification settings - Fork 36.4k
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
refactor: use std::shared_mutex & remove Boost Thread #21064
Conversation
…ache tests Co-authored-by: MarcoFalke falke.marco@gmail.com Co-authored-by: sinetek pitwuu@gmail.com
Co-authored-by: MarcoFalke falke.marco@gmail.com Co-authored-by: sinetek pitwuu@gmail.com
Adjust fuzzbuzz.yml to only install the Boost components we need.
Concept ACK. |
Code review ACK 060a2a6 |
Concept ACK |
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers. ConflictsReviewers, this pull request conflicts with the following ones:
If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
utACK
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ACK 060a2a6
Compiles without warnings with Clang 12, the modified cuckoocache_tests/*
tests pass.
For github to pick the Co-authored-by:
lines from commit messages, emails should be in <>
.
This replaces
boost::shared_mutex
andboost::unique_lock
withstd::shared_mutex
&std::unique_lock
.Even though some concerns were raised in #16684 with regard to
std::shared_mutex
being unsafe to use across some glibc versions, I still think this change is an improvement. As I mentioned in #21022, I also think trying to restrict standard library feature usage based on bugs in glibc is not only hard to do, but it's not currently clear exactly how we do that in practice (does it also extend to patching out use in our dependencies, should we be implementing more runtime checks for features we are using, when do we consider an affected glibc "old enough" not to worry about? etc). If you take a look through the glibc bug tracker you'll no doubt find plenty of (active) bug reports for standard library code we already using. Obviously not to say we shouldn't try and avoid buggy code where possible.Two other points:
Cory mentioned in #21022:
Moving away from Boost to the standard library also removes the potential for differences related to Boosts configuration. Boost has multiple versions of
shared_mutex
, and what you end up using, and what it's backed by depends on:BOOST_THREAD_VERSION
is defined: (2,3,4 or 5) default=2. (see here for some of the differences).BOOST_THREAD_V2_SHARED_MUTEX
defined? (not by default). If so, you might get the "less performant, but more robust" version ofshared_mutex
.A lot of these factors are eliminated by our use of depends, but users will have varying configurations. It's also not inconceivable to think that a distro, or some package manager might start defining something like
BOOST_THREAD_VERSION=3
. Boost tried to change the default from 2 to 3 at one point.With this change, we no longer use Boost Thread, so this PR also removes it from depends, the build system, CI etc.
Previous similar PRs were #19183 & #20922. The authors are included in the commits here.
Also related to #21022 - pthread sanity checking.