diff options
author | nharmata <nharmata@google.com> | 2018-08-08 07:51:53 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-08-08 07:53:31 -0700 |
commit | ba37ffed620a5711794566a5b0e497d1f8c4099b (patch) | |
tree | fe759b3701e22f6df2230082e220b00a8fe6d1ce /src/main/java/com/google/devtools/build/lib/concurrent | |
parent | 39e9b450a05f19e698fede059dccae29e962b97e (diff) |
Improve NaiveMultisetSemaphore#estimateCurrentNumUniqueValues by having it use Semaphore#availablePermits. I have no idea why I didn't do this initially.
RELNOTES: None
PiperOrigin-RevId: 207883650
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/concurrent')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/concurrent/MultisetSemaphore.java | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/concurrent/MultisetSemaphore.java b/src/main/java/com/google/devtools/build/lib/concurrent/MultisetSemaphore.java index 5996408d54..8a0bb93bde 100644 --- a/src/main/java/com/google/devtools/build/lib/concurrent/MultisetSemaphore.java +++ b/src/main/java/com/google/devtools/build/lib/concurrent/MultisetSemaphore.java @@ -133,14 +133,15 @@ public abstract class MultisetSemaphore<T> { } private static class NaiveMultisetSemaphore<T> extends MultisetSemaphore<T> { + private final int maxNumUniqueValues; private final Semaphore semaphore; private final Object lock = new Object(); // Protected by 'lock'. - private final HashMultiset<T> actualValues; + private final HashMultiset<T> actualValues = HashMultiset.create(); private NaiveMultisetSemaphore(int maxNumUniqueValues) { + this.maxNumUniqueValues = maxNumUniqueValues; this.semaphore = new Semaphore(maxNumUniqueValues); - actualValues = HashMultiset.create(); } @Override @@ -173,11 +174,7 @@ public abstract class MultisetSemaphore<T> { @Override public int estimateCurrentNumUniqueValues() { - // Notes: - // (1) The race here is completely benign; we're just supposed to return an estimate. - // (2) See the javadoc for Multiset#size, which explains to use entrySet().size() to get the - // number of unique values. - return actualValues.entrySet().size(); + return maxNumUniqueValues - semaphore.availablePermits(); } } } |