|
|
От: | Аноним | |
| Дата: | 25.07.09 17:37 | ||
| Оценка: | |||
Если неясно что делает конструктор scoped_try_lock, то читаем описание конструктора unique_lock (в доке сказано, что он ведёт себя аналогично):bool owns_lock() const
Returns:
true if the *this owns the lock on the Lockable object associated with *this.
Throws:
Nothing.
Делаем выводы: если конструктор boost::try_mutex::scoped_try_lock захватывает владение мьютексом, то owns_lock() возвращает true, а иначе — false. Если внимательно приглядеться к другим функциям, то можно увидеть, что вместо вызова owns_lock можно использовать неявное преобразование к bool или operator!. Что тут может быть непонятно? Я сам никогда не пользовался Boost.Thread, но причину проблемы и способ её решения нашёл за 5 минут. Чтобы напечатать и отформатировать этот пост, у меня времени ушло втрое больше.unique_lock(Lockable & m,boost::try_to_lock_t)
Effects:
Stores a reference to m. Invokes m.try_lock(), and takes ownership of the lock state if the call returns true.
Postcondition:
mutex() returns &m. If the call to try_lock() returned true, then owns_lock() returns true, otherwise owns_lock() returns false.
Throws:
Nothing.