UniSet 2.32.1
|
Но в общем случае это ни к чему хорошему не приведет, т.к. если в DoSomething()
возникнет исключение, то mutex.unlock()
уже не выполнится. Конечно можно использовать try
...catch, но желательно, чтобы код работал независимо от ситуации. Для этого введен класс uniset_mutex_lock. При его использовании получается следующий код (один из вариантов использования):
В этом случае, даже если в DoSomethig()
будет сгенерировано исключение ресурс будет освобожден при вызове деструктора. Вот и все решение...
mutex.lock()
и uniset_mutex.unlock()
в чистом виде, а только совместно с uniset_mutex_lock. Кроме особых случаев (см. Особые случаи). Если в DoSomethig()
будет вызвана exit(0)
, abort()
или что-нибудь подобное, то unlock не произойдет. В таком случае следовало бы напрямую вызывать unlock()
до вызова сигнала, но эти случаи редкие и если возникнет необходимость, то можно будет вместо protected сделать их public.