이 페이지에서

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 호환이 됩니다. 이 클래스는 동일한 스레드에서 lock() 호출을 몇 번이든 허용한다는 점에서 QMutex 와 다릅니다. QMutex 는 이러한 상황에서 교착 상태에 빠집니다.

QRecursiveMutex는 생성 및 작동에 훨씬 더 많은 비용이 들기 때문에, 가능하면 항상 일반 QMutex 를 사용하십시오. 그러나 때로는 하나의 공개 함수가 다른 공개 함수를 호출하고, 두 함수 모두 동일한 뮤텍스를 잠글 필요가 있는 경우가 있습니다. 이 경우 두 가지 옵션이 있습니다:

  • 뮤텍스 보호가 필요한 코드 부분을 비공개 함수로 분리하고, 이 함수들은 호출 시 뮤텍스가 이미 확보되어 있다고 가정하며, 비공개 구현 함수를 호출하기 전에 공개 함수 내에서 일반 QMutex 를 잠급니다.
  • 또는 재귀 뮤텍스를 사용하여, 두 번째 공개 함수가 뮤텍스를 잠그려고 할 때 첫 번째 공개 함수가 이미 뮤텍스를 잠근 상태여도 문제가 되지 않도록 합니다.

QMutex, QMutexLocker, QReadWriteLock, QSemaphore 및 QWaitCondition도 참조하십시오 .

멤버 함수 문서

[constexpr noexcept default] QRecursiveMutex::QRecursiveMutex()

새로운 재귀 뮤텍스를 생성합니다. 이 뮤텍스는 잠금 해제된 상태로 생성됩니다.

lock() 및 unlock()도 참조하십시오 .

[noexcept] QRecursiveMutex::~QRecursiveMutex()

뮤텍스를 파괴합니다.

경고: 잠겨 있는 뮤텍스를해제하면 정의되지 않은 동작이 발생할 수 있습니다.

[noexcept(...)] void QRecursiveMutex::lock()

뮤텍스를 잠급니다. 다른 스레드가 이미 뮤텍스를 잠근 상태라면, 이 호출은 해당 스레드가 잠금을 해제할 때까지 차단됩니다.

동일한 스레드에서 동일한 뮤텍스에 대해 이 함수를 여러 번 호출하는 것은 허용됩니다.

참고: ` LockIsNoexcept `가 ` true`일 때이 함수는 `noexcept`입니다.

unlock()도 참조하십시오 .

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

뮤텍스를 잠그려고 시도합니다. 이 함수는 잠금이 성공하면 ` true `를 반환하고, 그렇지 않으면 ` false`를 반환합니다. 다른 스레드가 뮤텍스를 잠근 상태라면, 이 함수는 ` timeout `가 만료되어 뮤텍스를 사용할 수 있게 될 때까지 대기합니다.

잠금을 획득한 경우, 다른 스레드가 뮤텍스를 성공적으로 잠글 수 있으려면 먼저 unlock()를 호출하여 잠금을 해제해야 합니다.

동일한 스레드에서 동일한 뮤텍스에 대해 이 함수를 여러 번 호출하는 것이 허용됩니다.

이 함수는 Qt 6.6에서 도입되었습니다.

참고: LockIsNoexcept 가 true 일 때,이 함수는 noexcept입니다.

lock() 및 unlock()도 참조하십시오 .

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

뮤텍스를 잠그려고 시도합니다. 이 함수는 잠금이 성공하면 ` true `를 반환하고, 그렇지 않으면 ` false`를 반환합니다. 다른 스레드가 뮤텍스를 잠근 상태라면, 이 함수는 뮤텍스가 사용 가능해질 때까지 최대 ` timeout ` 밀리초 동안 대기합니다.

참고: timeout 로 음수를 전달하는 것은 lock()를 호출하는 것과 동일합니다. 즉, timeout 가 음수인 경우 이 함수는 뮤텍스를 잠글 수 있을 때까지 무한정 대기합니다.

잠금이 획득된 경우, 다른 스레드가 뮤텍스를 성공적으로 잠글 수 있으려면 먼저 unlock()를 호출하여 뮤텍스의 잠금을 해제해야 합니다.

동일한 스레드에서 동일한 뮤텍스에 대해 이 함수를 여러 번 호출하는 것은 허용됩니다.

참고: LockIsNoexcept 가 true 인 경우,이 함수는 noexcept입니다.

lock() 및 unlock()도 참조하십시오 .

[noexcept(...)] bool QRecursiveMutex::try_lock()

뮤텍스를 잠그려고 시도합니다. 이 함수는 잠금이 성공하면 ` true `를 반환하고, 그렇지 않으면 ` false`를 반환합니다.

이 함수는 표준 라이브러리 개념인 ` Lockable`과의 호환성을 위해 제공됩니다. 이는 ` tryLock()`과 동등합니다.

참고: LockIsNoexcept 가 true 일 때,이 함수는 noexcept입니다.

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()도 참조하십시오 .

© 2026 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.