Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qsemaphore.cpp File Reference

(763ab0e6236de80a0b589fc574c75a414d86d374)

#include "qsemaphore.h"
#include "qfutex_p.h"
#include "qdeadlinetimer.h"
#include "qdatetime.h"
#include "qdebug.h"
#include "qlocking_p.h"
#include "qwaitcondition_p.h"
#include <chrono>
+ Include dependency graph for qsemaphore.cpp:

Go to the source code of this file.

Classes

struct  QtSemaphorePrivate::Layout1
 
struct  QtSemaphorePrivate::Layout2
 
class  QSemaphorePrivate
 

Namespaces

namespace  QtSemaphorePrivate
 

Typedefs

using QtSemaphorePrivate::Members = std::conditional_t<sizeof(Layout1) <= sizeof(Layout2), Layout1, Layout2>
 

Functions

static int futexAvailCounter (quintptr v)
 
static bool futexNeedsWake (quintptr v)
 
static QBasicAtomicInteger< quint32 > * futexLow32 (QBasicAtomicInteger< quintptr > *ptr)
 
static QBasicAtomicInteger< quint32 > * futexHigh32 (QBasicAtomicInteger< quintptr > *ptr)
 
template<bool IsTimed>
bool futexSemaphoreTryAcquire_loop (QBasicAtomicInteger< quintptr > &u, quintptr curValue, quintptr nn, QDeadlineTimer timer)
 
template<typename T >
bool futexSemaphoreTryAcquire (QBasicAtomicInteger< quintptr > &u, int n, T timeout)
 

Variables

static constexpr bool futexHasWaiterCount = false
 
static constexpr quintptr futexNeedsWakeAllBit
 
static constexpr QDeadlineTimer::ForeverConstant Expired
 

Function Documentation

◆ futexAvailCounter()

static int futexAvailCounter ( quintptr v)
static

Definition at line 106 of file qsemaphore.cpp.

References futexHasWaiterCount, and Q_ASSERT.

Referenced by QSemaphore::available(), futexSemaphoreTryAcquire(), and futexSemaphoreTryAcquire_loop().

+ Here is the caller graph for this function:

◆ futexHigh32()

static QBasicAtomicInteger< quint32 > * futexHigh32 ( QBasicAtomicInteger< quintptr > * ptr)
static

Definition at line 138 of file qsemaphore.cpp.

References futexHasWaiterCount, ptr(), and Q_ASSERT.

Referenced by futexSemaphoreTryAcquire(), futexSemaphoreTryAcquire_loop(), and QSemaphore::release().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ futexLow32()

static QBasicAtomicInteger< quint32 > * futexLow32 ( QBasicAtomicInteger< quintptr > * ptr)
static

Definition at line 129 of file qsemaphore.cpp.

References ptr().

Referenced by futexSemaphoreTryAcquire_loop(), and QSemaphore::release().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ futexNeedsWake()

static bool futexNeedsWake ( quintptr v)
static

Definition at line 119 of file qsemaphore.cpp.

References futexHasWaiterCount.

Referenced by QSemaphore::release().

+ Here is the caller graph for this function:

◆ futexSemaphoreTryAcquire()

template<typename T >
bool futexSemaphoreTryAcquire ( QBasicAtomicInteger< quintptr > & u,
int n,
T timeout )

Definition at line 196 of file qsemaphore.cpp.

References Expired, futexAvailCounter(), futexHasWaiterCount, futexHigh32(), Q_ASSERT, Q_UINT64_C, and qCritical.

Referenced by QSemaphore::acquire(), QSemaphore::tryAcquire(), and QSemaphore::tryAcquire().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ futexSemaphoreTryAcquire_loop()

template<bool IsTimed>
bool futexSemaphoreTryAcquire_loop ( QBasicAtomicInteger< quintptr > & u,
quintptr curValue,
quintptr nn,
QDeadlineTimer timer )

Definition at line 149 of file qsemaphore.cpp.

References futexAvailCounter(), futexHasWaiterCount, futexHigh32(), futexLow32(), futexNeedsWakeAllBit, QtFreeBSDFutex::futexWait(), ptr(), Q_ASSERT, and timer.

+ Here is the call graph for this function:

Variable Documentation

◆ Expired

constexpr QDeadlineTimer::ForeverConstant Expired
staticconstexpr
Initial value:
=
ForeverConstant
\value Forever Used when creating a QDeadlineTimer to indicate the deadline should not expire

Definition at line 192 of file qsemaphore.cpp.

Referenced by futexSemaphoreTryAcquire(), and QSemaphore::tryAcquire().

◆ futexHasWaiterCount

constexpr bool futexHasWaiterCount = false
staticconstexpr

◆ futexNeedsWakeAllBit

constexpr quintptr futexNeedsWakeAllBit
staticconstexpr
Initial value:
(Q_UINT64_C(1) << (sizeof(quintptr) * CHAR_BIT - 1)) : 0x80000000U
static constexpr bool futexHasWaiterCount
#define Q_UINT64_C(c)
Definition qtypes.h:58
size_t quintptr
Definition qtypes.h:167

Definition at line 103 of file qsemaphore.cpp.

Referenced by futexSemaphoreTryAcquire_loop(), and QSemaphore::release().