А>Делаем выводы: если конструктор boost::try_mutex::scoped_try_lock захватывает владение мьютексом, то owns_lock() возвращает true, а иначе — false. Если внимательно приглядеться к другим функциям, то можно увидеть, что вместо вызова owns_lock можно использовать неявное преобразование к bool или operator!. Что тут может быть непонятно? Я сам никогда не пользовался Boost.Thread, но причину проблемы и способ её решения нашёл за 5 минут. Чтобы напечатать и отформатировать этот пост, у меня времени ушло втрое больше.
Спасибо за потраченное время, но мне все равно интересно мнение людей, которые имели опыт решение подобной проблемы при помощи boost.
Иначе, если есть документация, то зачем нужны форумы?