Я не смотрел на источник, но я использовал их несколько дней назад, и временные мьютексы функционируют по-разному. Они блокируются до тех пор, пока время не закончится, а затем вернитесь. Уникальная блокировка блокируется, пока она не сможет получить блокировку.
Блокировка попыток не блокируется, и затем вы можете проверить, имеет ли она право собственности на замок. Временная блокировка будет блокироваться в течение определенного времени, а затем вести себя как блокировка try, то есть прекратить блокировку, и вы можете проверить право собственности на блокировку.
Я считаю, что внутренне некоторые из различных блокировок буксировки являются typedefs для уникальной блокировки, поскольку все они используют уникальную блокировку. Здесь есть имена typedef, чтобы вы могли отслеживать, для чего используете разные, хотя вы можете использовать разные функции и путать код клиента.
Edit: вот пример приурочено замок:
boost::timed_mutex timedMutexObj;
boost::mutex::scoped_lock scopedLockObj(timedMutexObj, boost::get_system_time() + boost::posix_time::seconds(60));
if(scopedLockObj.owns_lock()) {
// proceed
}
Для справки: http://www.boost.org/doc/libs/1_49_0/doc/html/thread/synchronization.html#thread.synchronization.mutex_concepts.timed_lockable.timed_lock
Редактировать снова: чтобы обеспечить конкретный ответ на ваш вопрос, да, было бы неправильно использовать boost::mutex
как TimedLockable
, поскольку для этой цели предусмотрена boost::timed_mutex
. Если они являются одним и тем же в источнике, и это недокументировано, это ненадежное поведение, и вы должны следовать документации. (Мой пример кода не использовался timed_mutex
поначалу, но я его обновил)
Так что, если один и тот же основной мьютекс * происходит * для реализации обеих концепций на * вашей * платформе. Они * позволяют * быть разными, но не * обязательными *! –
@BoPersson: Да, я понимаю, но это не похоже на то, что получающаяся дополнительная функциональность скрыта в некотором «подробном» пространстве имен. Общественные методы являются правильными в открытом доступе. Я нахожу его нехарактерным для библиотек Boost. –