◐ Shell
clean mode source ↗

std::unique_lock — cppreference.com

Материал из cppreference.com

<metanoindex/>

<tbody> </tbody>

Определено в заголовочном файле <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.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

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.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Типы-члены

Тип Definition
mutex_type Mutex

Функции-члены

строит unique_lock, необязательно блокировки поставляется мьютекс

Оригинал:

constructs a unique_lock, optionally locking the supplied mutex

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(public функция-элемент) [править]

разблокирует соответствующий мьютекс, если они принадлежат

Оригинал:

unlocks the associated mutex, if owned

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(public функция-элемент) [править]

разблокирует мьютекс, если они принадлежат, а также приобретает право собственности другому

Оригинал:

unlocks the mutex, if owned, and acquires ownership of another

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(public функция-элемент) [править]

Блокировка

Оригинал:

Locking

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

locks the associated mutex
(public функция-элемент) [править]

пытается заблокировать мьютекс, связанных, возвращается, если мьютекс не доступен

Оригинал:

tries to lock the associated mutex, returns if the mutex is not available

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(public функция-элемент) [править]

Попытки заблокировать соответствующие TimedLockable мьютекс, возвращается, если мьютекс был недоступен для заданного времени

Оригинал:

attempts to lock the associated TimedLockable mutex, returns if the mutex has been unavailable for the specified time duration

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(public функция-элемент) [править]

пытается заблокировать мьютекс связанных TimedLockable, возвращается, если мьютекс был недоступен до указанного момента времени была достигнута

Оригинал:

tries to lock the associated TimedLockable mutex, returns if the mutex has been unavailable until specified time point has been reached

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(public функция-элемент) [править]

разблокирует соответствующий мьютекс

Оригинал:

unlocks the associated mutex

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(public функция-элемент) [править]
Модификаторы

свопы состояние с другой std::unique_lock

Оригинал:

swaps state with another std::unique_lock

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(public функция-элемент) [править]

дистанцируется связанных мьютекса без разблокировки он

Оригинал:

disassociates the associated mutex without unlocking it

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(public функция-элемент) [править]
Наблюдатели

возвращает указатель на соответствующий мьютекс

Оригинал:

returns a pointer to the associated mutex

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(public функция-элемент) [править]

Тесты ли замок принадлежит связанных мьютекс

Оригинал:

tests whether the lock owns its associated mutex

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(public функция-элемент) [править]

Тесты ли замок принадлежит связанных мьютекс

Оригинал:

tests whether the lock owns its associated mutex

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.


(public функция-элемент) [править]

Функции, не являющиеся членами

Пример

#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();
}