8#ifndef INCLUDED_BSLMT_SLUICE
9#define INCLUDED_BSLMT_SLUICE
119#include <bslscm_version.h>
131#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
134#include <bsl_chrono.h>
163 struct GenerationDescriptor {
174 GenerationDescriptor *d_next;
188 GenerationDescriptor *d_signaledGeneration;
192 GenerationDescriptor *d_pendingGeneration;
196 GenerationDescriptor *d_descriptorPool;
233#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
241 Sluice(
const bsl::chrono::system_clock&,
251 Sluice(
const bsl::chrono::steady_clock&,
290#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
303 template <
class CLOCK,
class DURATION>
305 const bsl::chrono::time_point<CLOCK, DURATION>& absTime);
329#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
331template <
class CLOCK,
class DURATION>
333 const bsl::chrono::time_point<CLOCK, DURATION>& absTime)
336 GenerationDescriptor *g =
337 static_cast<GenerationDescriptor *
>(
const_cast<void *
>(token));
340 int rc = g->d_sema.timedWait(absTime);
344 if (g->d_numSignaled) {
355 const int numThreads = --g->d_numThreads;
357 if (0 == numThreads) {
360 if (d_signaledGeneration == g) {
362 d_signaledGeneration = 0;
365 if (d_pendingGeneration == g) {
367 d_pendingGeneration = 0;
370 g->d_next = d_descriptorPool;
371 d_descriptorPool = g;
Definition bslma_allocator.h:545
Definition bslmt_lockguard.h:234
Definition bslmt_mutex.h:317
Definition bslmt_sluice.h:151
void wait(const void *token)
int timedWait(const void *token, const bsls::TimeInterval &absTime)
bsls::SystemClockType::Enum clockType() const
Return the clock type used for timeouts.
Definition bslmt_sluice.h:380
Sluice(bsls::SystemClockType::Enum clockType, bslma::Allocator *basicAllocator=0)
@ e_TIMED_OUT
Definition bslmt_sluice.h:215
~Sluice()
Destroy this sluice.
Sluice(bslma::Allocator *basicAllocator=0)
Definition bslmt_timedsemaphore.h:222
@ e_TIMED_OUT
Definition bslmt_timedsemaphore.h:236
Definition bsls_timeinterval.h:307
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bslmt_barrier.h:344
Enum
Definition bsls_systemclocktype.h:119