Я использую QReadWriteLock в своем приложении для защиты доступа к объекту ресурса.
Я использую QReadLocks и QWriteLocks, где могу, но иногда мне нужен «долговечный» замок, который пересекает границы функций. Поэтому иногда мне нужно запрашивать состояние QReadWriteLock (или QMutex, то же самое в этой ситуации), потому что разблокировка мьютекса, который уже разблокирован, очень плохая.
Для QMutex:
Разблокировка мьютекса, который не заблокирован, приводит к неопределенному поведению.
Для QReadWriteLock:
Попытка разблокировать не заблокированную блокировку является ошибкой и приведет к завершению программы.
Возможность запрашивать состояние мьютекса также очень пригодится для отладочных утверждений, чтобы проверить, что перед началом какой-либо операции у меня действительно есть эта "долговечная" блокировка.
Но все, чего я действительно хочу, - это иметь возможность разблокировать мьютекс, если у меня есть замок, и не разблокировать его, если у меня его нет. Это сделало бы мой день. IMO, функция unlock()
уже должна сделать это для меня, но это не так.
Есть ли способ обойти это?
(и нет, использование режима Recursive
не помогает в этой ситуации)