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

QRecursiveMutex는 구성 및 운영 비용이 훨씬 더 많이 들기 때문에 가능하면 일반 QMutex 을 사용하세요. 그러나 때로는 하나의 공용 함수가 다른 공용 함수를 호출하고 둘 다 동일한 뮤텍스를 잠가야 하는 경우가 있습니다. 이 경우 두 가지 옵션이 있습니다:

  • 뮤텍스 보호가 필요한 코드를 비공개 함수에 포함시켜 호출될 때 뮤텍스가 유지되는 것으로 가정하고 비공개 구현 함수를 호출하기 전에 공개 함수에서 일반 QMutex 을 잠그는 것입니다.
  • 또는 재귀적 뮤텍스를 사용하면 두 번째 공개 함수가 뮤텍스를 잠그고 싶을 때 첫 번째 공개 함수가 이미 뮤텍스를 잠그고 있어도 상관없습니다.

QMutex, QMutexLocker, QReadWriteLock, QSemaphore, QWaitCondition참조하세요 .

멤버 함수 문서

[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.