내 응용 프로그램에서 리소스 객체에 대한 액세스를 보호하기 위해 QReadWriteLock을 사용하고 있습니다.Qt에서 QMutex 또는 QReadWriteLock의 상태를 어떻게 쿼리합니까?
내가 할 수있는 곳에서 QReadLocks와 QWriteLocks를 사용하고 있지만 때로는 함수 경계를 넘는 "수명이 긴"잠금이 필요합니다. 그래서 때로는 이미 잠금 해제 된 뮤텍스 잠금 해제가 매우 나쁘기 때문에 QReadWriteLock (또는 QMutex,이 상황에서 같은 것) 상태를 쿼리 할 수 있어야합니다. 정의되지 않은 동작의 결과를 잠겨 있지 않은 뮤텍스를 잠금 해제
: QMutex를 들어
.
QReadWriteLock를 들어
: 잠겨 있지 잠금을 해제하려고
오류이며, 프로그램이 해지됩니다.
뮤텍스의 상태를 쿼리 할 수 있다는 것은 디버그 어설 션에서 일부 작업을 시작하기 전에 테스트 할 때 매우 유용 할 것이므로 "장시간 지속되는"잠금이 실제로 있습니다.
하지만 정말로 원하는 것은 잠금이있는 경우 뮤텍스를 잠금 해제 할 수 있고 잠금을 해제하지 않으면 잠금을 해제 할 수 있다는 것입니다. 그것은 내 하루를 만들 것입니다. IMO는 unlock()
함수가 이미이 작업을 수행해야하지만 그렇게하지는 않습니다.
어쨌든 주위에?
(도없고,Recursive
모드를 사용하면이 상황에서 도움이되지 않습니다)
뮤텍스가 재귀 모드 (잠긴 스레드가 무기한으로 다시 잠길 수 있음) 일 때 tryLock 사용에 대한 첫 번째 제안이 실패하는 동안 두 번째 제안 인 래퍼 클래스로 인해 답변을 수락합니다. 그것은 좋은 생각이지만 노키아가 어떻게 생각했는지를 보여 주어야한다. – Lucas
# 2는 예술 상태입니다. # 1은 "더티 해킹"입니다. (예, 재귀 적으로 작동하지 않지만 QMutex/QReadWriteLock 메서드를 사용하여 재귀 뮤텍스를 수행 할 수 있다고 생각하지 않습니다) . – drahnr