This class implements a semaphore type, optimized for post, for thread synchronization.

Synopsis

Declared in <bslmt_fastpostsemaphoreimpl.h>

template<
    class ATOMIC_OP,
    class MUTEX,
    class CONDITION,
    class THREADUTIL>
class FastPostSemaphoreImpl;

Enums

Name

Description

ReturnValue

Status codes returned by semaphore operations.

Member Functions

Name

Description

FastPostSemaphoreImpl [constructor]

Constructors

clockType

Return the clock type used for timeouts.

disable

Disable waiting on this semaphore. All subsequent invocations of wait, tryWait, and timedWait will fail immediately. All blocked invocations of wait and timedWait will fail immediately. If the semaphore is initially disabled, this call has no effect.

enable

Enable waiting on this semaphore. If the semaphore is initially enabled, this call has no effect.

getDisabledState

Return an odd value if this semaphore is wait disabled, and an even value otherwise. The returned value can be used to detect a rapid short sequence of disable and enable invocations by comparing the value returned by getDisabledState before and after the sequence. For example, for any initial state of a semphore instance obj: ` int state = obj.getDisabledState(); obj.disable(); obj.enable(); ASSERT(state != obj.getDisabledState()); ` This functionality is useful in higher‐level components to determine if this semaphore was disabled during an operation.

getValue

Return the current value (count > 0 ? count : 0) of this semaphore.

getValueRaw

Return the current value (count) of this semaphore. Note that, unlike getValue, this method can return a negative value. Also note that this method is principally intended for use in testing.

isDisabled

Return true if this semaphore is wait disabled, and false otherwise. Note that the semaphore is created in the "wait enabled" state.

post

post overloads

postWithRedundantSignal

Atomically increase the count of this semaphore by the specified value. If the resources available to this semaphore is greater than or equal to the specified available and the number of threads blocked in this semaphore is greater than or equal to the specified blocked, always send a signal to potentially wake a waiting thread (even if the signal should not be needed). The behavior is undefined unless value > 0. Note that this method is provided to help mitigate issues in the implementation of underlying synchronization primitives.

take

If the count of this semaphore is positive, reduce the count by the lesser of the count and the specified maximumToTake and return the magnitude of the change to the count. Otherwise, do nothing and return 0.

takeAll

If the count of this semaphore is positive, reduce the count to 0 and return the original value of the count. Otherwise, do nothing and return 0.

timedWait

If this semaphore is initially disabled, or becomes disabled while blocking, return e_DISABLED with no effect on the count. Otherwise, block until the count of this semaphore is a positive value or the specified absTime timeout expires. If the count of this semaphore is a positive value, return 0 and atomically decrement the count. If the absTime timeout expires, return e_TIMED_OUT with no effect on the count. Return e_FAILED if an error occurs. absTime is an absolute time represented as an interval from some epoch, which is determined by the clock indicated at construction (see {Supported Clock‐Types} in the component documentation).

tryWait

If this semaphore is initially disabled, return e_DISABLED with no effect on the count. Otherwise, if the count of this semaphore is a positive value, return 0 and atomically decrement the count. If this semaphore is not disabled and the count of this semaphore is not a positive value, return e_WOULD_BLOCK with no effect on the count.

wait

If this semaphore is initially disabled, or becomes disabled while blocking, return e_DISABLED with no effect on the count. Otherwise, block until the count of this semaphore is a positive value, return 0 and atomically decrement the count. Return e_FAILED if an error occurs.

Static Data Members

Name

Description

k_AVAILABLE_INC

Increment value for the available count in d_state.

k_AVAILABLE_MASK

Mask for the available‐count field in d_state.

k_AVAILABLE_SHIFT

Bit shift for the available‐count field in d_state.

k_BLOCKED_INC

Increment value for the blocked‐thread count in d_state.

k_BLOCKED_MASK

Mask for the blocked‐thread count field in d_state.

k_DISABLED_GEN_INC

Increment value for the disabled‐generation count in d_state.

k_DISABLED_GEN_MASK

Mask for the disabled‐generation field in d_state.

k_DISABLED_GEN_SHIFT

Bit shift for the disabled‐generation field in d_state.

Created with MrDocs