[#BloombergLP-bslmt-Latch] = xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/bslmt.adoc[bslmt]::Latch :relfileprefix: ../../ :mrdocs: This class defines a thread synchronization mechanism that allows one or more threads to wait until a certain number of operations have been performed by other threads. == Synopsis Declared in `<bslmt_latch.h>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class Latch; ---- == Enums [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bslmt/Latch/_04enum.adoc[`Unnamed enum`] | Status codes for timed wait operations. |=== == Member Functions [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bslmt/Latch/2constructor-00.adoc[`Latch`] [.small]#[constructor]# | Constructors | xref:BloombergLP/bslmt/Latch/2destructor.adoc[`~Latch`] [.small]#[destructor]# | Destroy this latch. The behavior is undefined if any threads are waiting on this latch. | xref:BloombergLP/bslmt/Latch/arrive.adoc[`arrive`] | Decrement the number of events that this latch is waiting for by 1, and if the resulting number of events is 0 release any waiting threads. The behavior is undefined unless the sum of all events that have arrived at this latch does not exceed the count with which it was initialized. Note that the initial count of events is supplied at construction. | xref:BloombergLP/bslmt/Latch/arriveAndWait.adoc[`arriveAndWait`] | Decrement the number of events that this latch is waiting for by 1, and if the resulting number of events is 0 release any waiting threads; otherwise, block until the required number of events has been reached. The behavior is undefined unless the sum of all events that have arrived at this latch does not exceed the count with which it was initialized. Note that the initial count of events is supplied at construction. Also note that this method is equivalent to the following sequence: ` arrive(); wait(); ` | xref:BloombergLP/bslmt/Latch/clockType.adoc[`clockType`] | Return the clock type used for timeouts. | xref:BloombergLP/bslmt/Latch/countDown.adoc[`countDown`] | Decrement the number of events that this latch is waiting for by the specified `numEvents`, and if the resulting number of events is 0 release any waiting threads. The behavior is undefined unless `numEvents > 0` and the sum of all events that have arrived at this latch does not exceed the count with which it was initialized. Note that the initial count of events is supplied at construction. | xref:BloombergLP/bslmt/Latch/currentCount.adoc[`currentCount`] | Return the current number of events for which this latch is waiting. Note that this method is provided primarily for debugging purposes (i.e., its intended use is not as a synchronization mechanism), and can be used only as an upper bound for the current count without other external state information. | xref:BloombergLP/bslmt/Latch/timedWait-07.adoc[`timedWait`] | `timedWait` overloads | xref:BloombergLP/bslmt/Latch/tryWait.adoc[`tryWait`] | Return `true` if this latch has already been released (i.e., the number of events the latch is waiting on is 0), and `false` otherwise. This method does not block. Note that a return value of `true` indicates a permanent state change (the latch has released and will never be un‐released), but a return value of `false` is ephemeral and cannot typically be acted upon without additional external state information. Also note that a return value of `true` does not guarantee this object is safe to destroy. | xref:BloombergLP/bslmt/Latch/wait.adoc[`wait`] | Block until the number of events that this latch is waiting for reaches 0. Note that completion of this method does not guarantee this object is safe to destroy. |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#