QRecursiveMutex Class

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

ヘッダー #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つ目のパブリック関数がミューテックスをロックしたいときに、1つ目のパブリック関数がすでにミューテックスをロックしていても問題にはなりません。

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()も参照のこと

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.