QRecursiveMutex Class

QRecursiveMutexクラスは、スレッド間のアクセス・シリアライズを提供します。詳細...

Header: #include <QRecursiveMutex>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

注意:このクラスの関数はすべてスレッドセーフです。

パブリック関数

QRecursiveMutex()
~QRecursiveMutex()
void lock()
(since 6.6) bool tryLock(QDeadlineTimer timeout = {})
bool tryLock(int timeout)
bool try_lock()
bool try_lock_for(std::chrono::duration<Rep, Period> duration)
bool try_lock_until(std::chrono::time_point<Clock, Duration> timePoint)
void unlock()

詳細説明

QRecursiveMutex クラスは、QMutex と同様に、API 互換のミューテックスです。QMutex との違いは、同じスレッドからのlock() 呼び出しを何度でも受け付ける点である。QMutex ではデッドロックが発生する。

QRecursiveMutexは、構築にも操作にもコストがかかるので、できる限りプレーンなQMutex 。しかし、あるパブリック関数が別のパブリック関数を呼び出し、その両方が同じミューテックスをロックする必要がある場合があります。この場合、2つの選択肢があります:

  • QMutex プライベート関数は、その関数が呼び出されたときにミューテックスが保持されてい ることを前提としています。
  • あるいは、再帰的ミューテックスを使用することで、2つ目のパブリック関数がミューテックスをロックしたいときに、最初のパブリック関数がすでにミューテックスをロックしていても問題にはなりません。

QMutexQMutexLockerQReadWriteLockQSemaphoreQWaitConditionも参照のこと

メンバ関数ドキュメント

[constexpr noexcept] QRecursiveMutex::QRecursiveMutex()

新しい再帰的ミューテックスを構築する。ミューテックスはアンロック状態で生成される。

lock() およびunlock()も参照

[noexcept] QRecursiveMutex::~QRecursiveMutex()

ミューテックスを破棄する。

警告: ロックされたミューテックスを破棄すると、未定義の動作になる可能性があります。

[noexcept] void QRecursiveMutex::lock()

ミューテックスをロックします。他のスレッドがミューテックスをロックしている場合、そのスレッドがロックを解除するまで、この呼び出しはブロックされる。

同じスレッドから同じミューテックスに対してこの関数を複数回呼び出すことは可能である。

unlock()も参照のこと

[noexcept, since 6.6] bool QRecursiveMutex::tryLock(QDeadlineTimer timeout = {})

ミューテックスのロックを試みます。この関数は、ロックが得られた場合はtrue を返し、そうでない場合はfalse を返す。他のスレッドがミューテックスをロックしている場合、この関数はtimeout の期限が切れるまで、ミューテックスが使用可能になるまで待つ。

ロックが取得された場合、他のスレッドがミューテックスを正常にロックする前に、unlock() でロックを解除しなければならない。

同じスレッドから同じミューテックスに対してこの関数を複数回呼び出すことは可能です。

この関数はQt 6.6で導入されました。

lock() およびunlock()も参照してください

[noexcept] bool QRecursiveMutex::tryLock(int timeout)

ミューテックスのロックを試みます。この関数は、ロックが得られた場合はtrue を返し、そうでない場合はfalse を返します。他のスレッドがミューテックスをロックしている場合、この関数は、ミューテックスが使用可能になるまで最大でtimeout ミリ秒待機します。

注意:timeout に負の数を渡すと、lock() を呼び出すのと同じことになる。つまり、timeout が負の場合、この関数はミューテックスがロックできるまで永遠に待つことになる。

ロックが取得された場合、他のスレッドが正常にロックできるようになる前に、unlock() でミューテックスをアンロックしなければならない。

同じスレッドから同じミューテックスに対してこの関数を複数回呼び出してもよい。

lock() およびunlock()も参照のこと

[noexcept] bool QRecursiveMutex::try_lock()

ミューテックスのロックを試みる。この関数は、ロックが得られた場合はtrue を返し、そうでない場合はfalse を返す。

この関数は、標準ライブラリの概念Lockable との互換性のために提供されている。tryLock() と等価である。

template <typename Rep, typename Period> bool QRecursiveMutex::try_lock_for(std::chrono::duration<Rep, Period> duration)

ミューテックスのロックを試みます。この関数は、ロックが得られた場合はtrue を返し、そうでない場合はfalse を返す。他のスレッドがミューテックスをロックしている場合、この関数は、ミューテックスが使用可能になるまで少なくともduration 待つ。

注意:duration に負の継続時間を渡すことは、try_lock() を呼び出すことと等価である。この動作はtryLock() とは異なる。

ロックが取得された場合、他のスレッドがそのミューテックスを正常にロックする前に、unlock() でロックを解除しなければならない。

同じスレッドから同じミューテックスに対してこの関数を複数回呼び出してもよい。

lock() およびunlock()も参照のこと

template <typename Clock, typename Duration> bool QRecursiveMutex::try_lock_until(std::chrono::time_point<Clock, Duration> timePoint)

ミューテックスのロックを試みる。この関数は、ロックが得られた場合はtrue を返し、そうでない場合はfalse を返す。他のスレッドがミューテックスをロックしている場合、この関数は、少なくともtimePoint が利用可能になるまで待ちます。

注意:すでに渡されたtimePoint を渡すことは、try_lock ()を呼び出すことと同じである。この動作はtryLock() とは異なる。

ロックが取得された場合、他のスレッドがそのミューテックスを正常にロックする前に、unlock() でロックを解除しなければならない。

同じスレッドから同じミューテックスに対してこの関数を複数回呼び出してもよい。

lock() およびunlock()も参照のこと

[noexcept] void QRecursiveMutex::unlock()

ミューテックスのロックを解除する。ロックしたスレッドとは別のスレッドでミューテックスのロックを解除しようとすると、エラーになります。ロックされていないミューテックスのロックを解除すると、未定義の動作になります。

lock()も参照してください

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。