Skip to content

Commit

Permalink
Introduce no spin policy for SharedMutex
Browse files Browse the repository at this point in the history
Summary:
In some cases we known there is no need to spin at all for various reasons.
Introduce `PolicyNoSpin` and `SharedMutexWritePriorityNoSpin` alias, so we can
reuse this policy.

Reviewed By: ot

Differential Revision: D53265542

fbshipit-source-id: 60fbd807827480da494f62d5ad726c5760420856
  • Loading branch information
ilvokhin authored and facebook-github-bot committed Feb 5, 2024
1 parent 718e602 commit 50a3753
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 0 deletions.
8 changes: 8 additions & 0 deletions folly/SharedMutex.h
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,9 @@ struct SharedMutexPolicyDefault {

namespace shared_mutex_detail {

struct PolicyNoSpin : SharedMutexPolicyDefault {
static constexpr uint64_t max_spin_cycles = 0;
};
struct PolicyTracked : SharedMutexPolicyDefault {
static constexpr bool track_thread_id = true;
};
Expand Down Expand Up @@ -1616,6 +1619,11 @@ class SharedMutexImpl : std::conditional_t<
using SharedMutexReadPriority = SharedMutexImpl<true>;
using SharedMutexWritePriority = SharedMutexImpl<false>;
using SharedMutex = SharedMutexWritePriority;
using SharedMutexNoSpin = SharedMutexImpl<
false,
void,
std::atomic,
shared_mutex_detail::PolicyNoSpin>;
using SharedMutexTracked = SharedMutexImpl<
false,
void,
Expand Down
7 changes: 7 additions & 0 deletions folly/test/SharedMutexTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ void runBasicTest() {
TEST(SharedMutex, basic) {
runBasicTest<SharedMutexReadPriority>();
runBasicTest<SharedMutexWritePriority>();
runBasicTest<SharedMutexNoSpin>();
runBasicTest<SharedMutexSuppressTSAN>();
runBasicTest<SharedMutexTracked>();
}
Expand Down Expand Up @@ -181,6 +182,7 @@ void runBasicHoldersTest() {
TEST(SharedMutex, basicHolders) {
runBasicHoldersTest<SharedMutexReadPriority>();
runBasicHoldersTest<SharedMutexWritePriority>();
runBasicHoldersTest<SharedMutexNoSpin>();
runBasicHoldersTest<SharedMutexSuppressTSAN>();
runBasicHoldersTest<SharedMutexTracked>();
}
Expand Down Expand Up @@ -209,6 +211,7 @@ TEST(SharedMutex, manyReadLocksWithTokens) {
SKIP_IF(folly::kIsSanitizeThread);
runManyReadLocksTestWithTokens<SharedMutexReadPriority>();
runManyReadLocksTestWithTokens<SharedMutexWritePriority>();
runManyReadLocksTestWithTokens<SharedMutexNoSpin>();
runManyReadLocksTestWithTokens<SharedMutexSuppressTSAN>();
runManyReadLocksTestWithTokens<SharedMutexTracked>();
}
Expand All @@ -235,6 +238,7 @@ TEST(SharedMutex, manyReadLocksWithoutTokens) {
SKIP_IF(folly::kIsSanitizeThread);
runManyReadLocksTestWithoutTokens<SharedMutexReadPriority>();
runManyReadLocksTestWithoutTokens<SharedMutexWritePriority>();
runManyReadLocksTestWithoutTokens<SharedMutexNoSpin>();
runManyReadLocksTestWithoutTokens<SharedMutexSuppressTSAN>();
runManyReadLocksTestWithoutTokens<SharedMutexTracked>();
}
Expand Down Expand Up @@ -266,6 +270,7 @@ void runTimeoutInPastTest() {
TEST(SharedMutex, timeoutInPast) {
runTimeoutInPastTest<SharedMutexReadPriority>();
runTimeoutInPastTest<SharedMutexWritePriority>();
runTimeoutInPastTest<SharedMutexNoSpin>();
runTimeoutInPastTest<SharedMutexSuppressTSAN>();
runTimeoutInPastTest<SharedMutexTracked>();
}
Expand Down Expand Up @@ -354,6 +359,7 @@ void runFailingTryTimeoutTest() {
TEST(SharedMutex, failingTryTimeout) {
runFailingTryTimeoutTest<SharedMutexReadPriority>();
runFailingTryTimeoutTest<SharedMutexWritePriority>();
runFailingTryTimeoutTest<SharedMutexNoSpin>();
runFailingTryTimeoutTest<SharedMutexSuppressTSAN>();
runFailingTryTimeoutTest<SharedMutexTracked>();
}
Expand Down Expand Up @@ -399,6 +405,7 @@ void runBasicUpgradeTest() {
TEST(SharedMutex, basicUpgradeTests) {
runBasicUpgradeTest<SharedMutexReadPriority>();
runBasicUpgradeTest<SharedMutexWritePriority>();
runBasicUpgradeTest<SharedMutexNoSpin>();
runBasicUpgradeTest<SharedMutexSuppressTSAN>();
runBasicUpgradeTest<SharedMutexTracked>();
}
Expand Down

0 comments on commit 50a3753

Please sign in to comment.