Commit a9197170 authored by Maged Michael's avatar Maged Michael Committed by Facebook Github Bot

FlatCombining: Use SaturatingSemaphore instead of multi-poster and non-blocking Baton

Summary: Use SaturatingSemaphore instead of multi-poster and non-blocking Baton, in preparation for restoring Baton to being single-poster and with blocking wait().

Reviewed By: davidtgoldblatt

Differential Revision: D6510619

fbshipit-source-id: eed87beabc1b698080b8e41c746d570d30804ce7
parent 39018ad5
/* /*
* Copyright 2017 Facebook, Inc. * Copyright 2017-present Facebook, Inc.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -20,11 +20,12 @@ ...@@ -20,11 +20,12 @@
#include <folly/IndexedMemPool.h> #include <folly/IndexedMemPool.h>
#include <folly/Portability.h> #include <folly/Portability.h>
#include <folly/concurrency/CacheLocality.h> #include <folly/concurrency/CacheLocality.h>
#include <folly/synchronization/Baton.h> #include <folly/synchronization/SaturatingSemaphore.h>
#include <atomic> #include <atomic>
#include <cassert> #include <cassert>
#include <mutex> #include <mutex>
#include <thread>
namespace folly { namespace folly {
...@@ -112,9 +113,9 @@ class FlatCombining { ...@@ -112,9 +113,9 @@ class FlatCombining {
/// Combining request record. /// Combining request record.
class Rec { class Rec {
FOLLY_ALIGN_TO_AVOID_FALSE_SHARING FOLLY_ALIGN_TO_AVOID_FALSE_SHARING
folly::Baton<Atom, true, false> valid_; folly::SaturatingSemaphore<false, Atom> valid_;
folly::Baton<Atom, true, false> done_; folly::SaturatingSemaphore<false, Atom> done_;
folly::Baton<Atom, true, false> disconnected_; folly::SaturatingSemaphore<false, Atom> disconnected_;
size_t index_; size_t index_;
size_t next_; size_t next_;
uint64_t last_; uint64_t last_;
...@@ -136,7 +137,7 @@ class FlatCombining { ...@@ -136,7 +137,7 @@ class FlatCombining {
} }
bool isValid() const { bool isValid() const {
return valid_.try_wait(); return valid_.ready();
} }
void setDone() { void setDone() {
...@@ -148,7 +149,7 @@ class FlatCombining { ...@@ -148,7 +149,7 @@ class FlatCombining {
} }
bool isDone() const { bool isDone() const {
return done_.try_wait(); return done_.ready();
} }
void awaitDone() { void awaitDone() {
...@@ -164,7 +165,7 @@ class FlatCombining { ...@@ -164,7 +165,7 @@ class FlatCombining {
} }
bool isDisconnected() const { bool isDisconnected() const {
return disconnected_.try_wait(); return disconnected_.ready();
} }
void setIndex(const size_t index) { void setIndex(const size_t index) {
...@@ -424,7 +425,7 @@ class FlatCombining { ...@@ -424,7 +425,7 @@ class FlatCombining {
Mutex m_; Mutex m_;
FOLLY_ALIGN_TO_AVOID_FALSE_SHARING FOLLY_ALIGN_TO_AVOID_FALSE_SHARING
folly::Baton<Atom, false, true> pending_; folly::SaturatingSemaphore<true, Atom> pending_;
Atom<bool> shutdown_{false}; Atom<bool> shutdown_{false};
FOLLY_ALIGN_TO_AVOID_FALSE_SHARING FOLLY_ALIGN_TO_AVOID_FALSE_SHARING
...@@ -541,7 +542,7 @@ class FlatCombining { ...@@ -541,7 +542,7 @@ class FlatCombining {
} }
bool isPending() const { bool isPending() const {
return pending_.try_wait(); return pending_.ready();
} }
void awaitPending() { void awaitPending() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment