Пространства имён
Варианты
Действия

std::unique_lock

Материал из cppreference.com
< cpp‎ | thread

 
 
Библиотека поддержки потоков
Потоки
Оригинал:
Threads
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
thread(C++11)
this_thread имен
Оригинал:
this_thread namespace
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
get_id(C++11)
yield(C++11)
sleep_for(C++11)
sleep_until(C++11)
Взаимное исключение
Оригинал:
Mutual exclusion
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
mutex(C++11)
timed_mutex(C++11)
Generic управления замком
Оригинал:
Generic lock management
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
lock_guard(C++11)
unique_lock(C++11)
defer_lock_t
try_to_lock_t
adopt_lock_t
(C++11)
(C++11)
(C++11)
lock(C++11)
try_lock(C++11)
defer_lock
try_to_lock
adopt_lock
(C++11)
(C++11)
(C++11)
Условия переменных
Оригинал:
Condition variables
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
condition_variable(C++11)
condition_variable_any(C++11)
notify_all_at_thread_exit(C++11)
cv_status(C++11)
Futures
Оригинал:
Futures
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
promise(C++11)
future(C++11)
shared_future(C++11)
packaged_task(C++11)
async(C++11)
launch(C++11)
future_status(C++11)
future_error(C++11)
future_category(C++11)
future_errc(C++11)
 
std::unique_lock
Функции-члены
unique_lock::unique_lock
unique_lock::~unique_lock
unique_lock::operator=
Блокировка
Оригинал:
Locking
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
unique_lock::lock
unique_lock::try_lock
unique_lock::try_lock_for
unique_lock::try_lock_until
unique_lock::unlock
Модификаторы
unique_lock::swap
unique_lock::release
Наблюдатели
unique_lock::mutex
unique_lock::owns_lock
unique_lock::operator bool
Функции, не являющиеся членами
std::swap
 
Определено в заголовочном файле <mutex>
template< class Mutex >
class unique_lock;
(начиная с C++11)
Класс unique_lock является общего назначения мьютекс собственности оболочки позволяет отложенные замок, своевременное замок, рекурсивные замок, блокировка передачи собственности, и использовать с переменными условия.
Оригинал:
The class unique_lock is a general-purpose mutex ownership wrapper allowing deferred locking, timed locking, recursive locking, transfer of lock ownership, and use with condition variables.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
unique_lock класса, не скопировать, но она подвижна. Поставляемых Mutex типа осуществляют BasicLockable концепции.
Оригинал:
The unique_lock class is non-copyable, but it is movable. The supplied Mutex type shall implement the BasicLockable concept.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

Содержание

[править] Член типов

Type
Оригинал:
Type
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Definition
mutex_type Mutex

[править] Член функций

строит unique_lock, необязательно блокировки поставляется мьютекс
Оригинал:
constructs a unique_lock, optionally locking the supplied mutex
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(public функция-член) [edit]
разблокирует соответствующий мьютекс, если они принадлежат
Оригинал:
unlocks the associated mutex, if owned
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(public функция-член) [edit]
разблокирует мьютекс, если они принадлежат, а также приобретает право собственности другому
Оригинал:
unlocks the mutex, if owned, and acquires ownership of another
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(public функция-член) [edit]
Блокировка
Оригинал:
Locking
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
locks the associated mutex
(public функция-член) [edit]
пытается заблокировать мьютекс, связанных, возвращается, если мьютекс не доступен
Оригинал:
tries to lock the associated mutex, returns if the mutex is not available
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(public функция-член) [edit]
Попытки заблокировать соответствующие TimedLockable мьютекс, возвращается, если мьютекс был недоступен для заданного времени
Оригинал:
attempts to lock the associated TimedLockable mutex, returns if the mutex has been unavailable for the specified time duration
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(public функция-член) [edit]
пытается заблокировать мьютекс связанных TimedLockable, возвращается, если мьютекс был недоступен до указанного момента времени была достигнута
Оригинал:
tries to lock the associated TimedLockable mutex, returns if the mutex has been unavailable until specified time point has been reached
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(public функция-член) [edit]
разблокирует соответствующий мьютекс
Оригинал:
unlocks the associated mutex
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(public функция-член) [edit]
Модификаторы
Оригинал:
Modifiers
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
свопы состояние с другой std::unique_lock
Оригинал:
swaps state with another std::unique_lock
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(public функция-член) [edit]
дистанцируется связанных мьютекса без разблокировки он
Оригинал:
disassociates the associated mutex without unlocking it
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(public функция-член) [edit]
Наблюдателей
Оригинал:
Observers
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
возвращает указатель на соответствующий мьютекс
Оригинал:
returns a pointer to the associated mutex
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(public функция-член) [edit]
Тесты ли замок принадлежит связанных мьютекс
Оригинал:
tests whether the lock owns its associated mutex
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(public функция-член) [edit]
Тесты ли замок принадлежит связанных мьютекс
Оригинал:
tests whether the lock owns its associated mutex
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(public функция-член) [edit]

[править] Не являющиеся членами функций

Специализация std::swap для unique_lock
Оригинал:
specialization of std::swap for unique_lock
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(шаблон функции) [edit]

[править] Пример

#include <mutex>
#include <thread>
#include <chrono>
 
struct Box {
    explicit Box(int num) : num_things{num} {}
 
    int num_things;
    std::mutex m;
};
 
void transfer(Box &from, Box &to, int num)
{
    // don't actually take the locks yet
    std::unique_lock<std::mutex> lock1(from.m, std::defer_lock);
    std::unique_lock<std::mutex> lock2(to.m, std::defer_lock);
 
    // lock both unique_locks without deadlock
    std::lock(lock1, lock2);
 
    from.num_things -= num;
    to.num_things += num;
 
    lock1.unlock();
    lock2.unlock();
}
 
int main()
{
    Box acc1(100);
    Box acc2(50);
 
    std::thread t1(transfer, std::ref(acc1), std::ref(acc2), 10);
    std::thread t2(transfer, std::ref(acc2), std::ref(acc1), 5);
 
    t1.join();
    t2.join();
}