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() | |
~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つ目のパブリック関数がミューテックスをロックしたいときに、最初のパブリック関数がすでにミューテックスをロックしていても問題にはなりません。
QMutex 、QMutexLocker 、QReadWriteLock 、QSemaphore 、QWaitConditionも参照のこと 。
メンバ関数ドキュメント
[constexpr noexcept]
QRecursiveMutex::QRecursiveMutex()
新しい再帰的ミューテックスを構築する。ミューテックスはアンロック状態で生成される。
[noexcept]
QRecursiveMutex::~QRecursiveMutex()
ミューテックスを破棄する。
警告: ロックされたミューテックスを破棄すると、未定義の動作になる可能性があります。
[noexcept]
void QRecursiveMutex::lock()
ミューテックスをロックします。他のスレッドがミューテックスをロックしている場合、そのスレッドがロックを解除するまで、この呼び出しはブロックされる。
同じスレッドから同じミューテックスに対してこの関数を複数回呼び出すことは可能である。
unlock()も参照のこと 。
[noexcept, since 6.6]
bool QRecursiveMutex::tryLock(QDeadlineTimer timeout = {})
ミューテックスのロックを試みます。この関数は、ロックが得られた場合はtrue
を返し、そうでない場合はfalse
を返す。他のスレッドがミューテックスをロックしている場合、この関数はtimeout の期限が切れるまで、ミューテックスが使用可能になるまで待つ。
ロックが取得された場合、他のスレッドがミューテックスを正常にロックする前に、unlock() でロックを解除しなければならない。
同じスレッドから同じミューテックスに対してこの関数を複数回呼び出すことは可能です。
この関数はQt 6.6で導入されました。
[noexcept]
bool QRecursiveMutex::tryLock(int timeout)
ミューテックスのロックを試みます。この関数は、ロックが得られた場合はtrue
を返し、そうでない場合はfalse
を返します。他のスレッドがミューテックスをロックしている場合、この関数は、ミューテックスが使用可能になるまで最大でtimeout ミリ秒待機します。
注意:timeout に負の数を渡すと、lock() を呼び出すのと同じことになる。つまり、timeout が負の場合、この関数はミューテックスがロックできるまで永遠に待つことになる。
ロックが取得された場合、他のスレッドが正常にロックできるようになる前に、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() でロックを解除しなければならない。
同じスレッドから同じミューテックスに対してこの関数を複数回呼び出してもよい。
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() でロックを解除しなければならない。
同じスレッドから同じミューテックスに対してこの関数を複数回呼び出してもよい。
[noexcept]
void QRecursiveMutex::unlock()
ミューテックスのロックを解除する。ロックしたスレッドとは別のスレッドでミューテックスのロックを解除しようとすると、エラーになります。ロックされていないミューテックスのロックを解除すると、未定義の動作になります。
lock()も参照してください 。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。