33 Thread support library [thread]

33.4 Mutual exclusion [thread.mutex]

33.4.5 Generic locking algorithms [thread.lock.algorithm]

template <class L1, class L2, class... L3> int try_lock(L1&, L2&, L3&...);

Requires: Каждый тип параметра шаблона должен соответствовать Lockable требованиям. [ Шаблон класса отвечает этим требованиям при соответствующем инстанцирован. ]Note: unique_­lock end note

Effects: Вызывает try_­lock() каждый аргумент по порядку, начиная с первого, до тех пор, пока все аргументы не будут обработаны или вызов try_­lock() не завершится ошибкой, либо путем возврата, false либо путем выброса исключения. Если вызов для try_­lock() завершается неудачно, unlock() должны вызываться все предыдущие аргументы, и не должно быть никаких дальнейших вызовов try_­lock().

Returns: -1 если все вызовы try_­lock() возвращены true, в противном случае отсчитываемое от нуля значение индекса, указывающее аргумент, для которого был try_­lock() возвращен false.

template <class L1, class L2, class... L3> void lock(L1&, L2&, L3&...);

Requires: Каждый тип параметра шаблона должен отвечать Lockable требованиям, [ шаблонный класс отвечает этим требованиям при соответствующем инстанцирован. ]Note: unique_­lock end note

Effects: Все аргументы заблокированы через последовательность звонков lock(), try_­lock()или unlock() по каждому аргументу. Последовательность вызовов не должна приводить к тупиковой ситуации, но иначе не определена. [ Note: Должен использоваться алгоритм предотвращения взаимоблокировок, такой как попытка и откат, но конкретный алгоритм не указан, чтобы избежать чрезмерных ограничений реализаций. ] Если вызов или вызывает исключение, должен вызываться для любого аргумента, который был заблокирован вызовом или . end notelock() try_­lock() unlock() lock() try_­lock()