1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// The LLVM Compiler Infrastructure 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <mutex> 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class L1, class L2, class... L3> 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// int try_lock(L1&, L2&, L3&...); 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <mutex> 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass L0 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool locked_; 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0() : locked_(false) {} 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool try_lock() 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locked_ = true; 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return locked_; 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void unlock() {locked_ = false;} 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool locked() const {return locked_;} 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass L1 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool locked_; 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1() : locked_(false) {} 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool try_lock() 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locked_ = false; 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return locked_; 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void unlock() {locked_ = false;} 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool locked() const {return locked_;} 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass L2 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool locked_; 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2() : locked_(false) {} 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool try_lock() 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant throw 1; 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return locked_; 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void unlock() {locked_ = false;} 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool locked() const {return locked_;} 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1) == -1); 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l0.locked()); 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l1.locked()); 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1) == 1); 85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1) == 0); 92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1); 101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1); 115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef _LIBCPP_HAS_NO_VARIADICS 124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == -1); 129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l0.locked()); 130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l1.locked()); 131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l2.locked()); 132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 0); 138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 139bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 140bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 142bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 143bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 146bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 147bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 148bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 149bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 150bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 151bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 152bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 153bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 154bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 155bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 156bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 157bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 158bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 159bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 160bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 161bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 162bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 1); 163bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 164bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 165bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 166bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 167bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 168bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 169bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 170bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 171bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 2); 172bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 173bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 174bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 175bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 176bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 177bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 178bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 179bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 180bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 1); 181bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 182bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 183bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 184bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 185bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 186bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 187bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 188bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 189bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 0); 190bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 191bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 192bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 193bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 194bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 195bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 196bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 197bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 198bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 199bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 200bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 201bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 202bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 203bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 204bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 205bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 206bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 207bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 208bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 209bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 210bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 211bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 212bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 213bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 214bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 215bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 216bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 217bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 218bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 219bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 220bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 221bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 222bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 223bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 224bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 225bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 226bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 227bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 228bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 229bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 230bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 231bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 232bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 233bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 234bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 235bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 236bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 237bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 238bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 239bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 240bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 241bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 242bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 243bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 244bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 245bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 246bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 0); 247bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 248bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 249bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 250bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 251bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 252bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 253bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 254bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 255bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 0); 256bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 257bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 258bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 259bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 260bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 261bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 262bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 263bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 264bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 1); 265bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 266bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 267bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 268bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 269bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 270bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 271bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 272bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 273bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 0); 274bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 275bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 276bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 277bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 278bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 279bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 280bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 281bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 282bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 0); 283bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 284bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 285bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 286bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 287bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 288bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 289bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 290bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 291bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 292bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 293bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 294bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 295bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 296bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 297bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 298bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 299bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 300bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 301bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 302bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 303bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 304bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 305bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 306bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 307bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 308bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 309bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 310bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 311bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 312bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 313bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 314bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 315bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 316bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 317bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 318bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 319bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 320bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 321bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 322bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 323bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 324bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 325bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 326bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 327bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 328bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 329bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 330bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 331bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 332bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 333bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 334bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 335bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 336bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 337bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 338bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 339bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 340bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 341bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 342bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 343bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 344bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 345bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 346bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 347bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 348bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 349bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 350bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 351bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 352bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 353bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 354bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 355bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 356bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 357bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 358bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 359bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 360bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 361bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 362bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 363bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 364bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 365bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 366bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 367bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 368bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 369bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 370bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 371bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 372bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 373bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 374bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 375bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 376bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 377bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 378bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 379bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 380bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 381bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 382bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 383bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 384bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 385bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 386bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 387bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 0); 388bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 389bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 390bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 391bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 392bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 393bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 394bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 395bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 396bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 397bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 398bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 399bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 400bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 401bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 402bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 403bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 404bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 405bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 406bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 407bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 408bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 409bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 410bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 411bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 412bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 0); 413bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 414bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 415bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 416bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 417bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 418bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 419bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 420bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 421bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 0); 422bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 423bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 424bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 425bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 426bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 427bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 428bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 429bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 430bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 431bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 432bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 433bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 434bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 435bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 436bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 437bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 438bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 439bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 440bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 441bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 442bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 443bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 444bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 445bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 446bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 447bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 448bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 449bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 450bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 451bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 452bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 453bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 454bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 455bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 456bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 457bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 458bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 459bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 460bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 461bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 462bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l3; 463bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2, l3) == -1); 464bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l0.locked()); 465bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l1.locked()); 466bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l2.locked()); 467bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l3.locked()); 468bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 469bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 470bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 471bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 472bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 473bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l3; 474bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2, l3) == 0); 475bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 476bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 477bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 478bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l3.locked()); 479bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 480bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 481bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 482bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 483bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 484bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l3; 485bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2, l3) == 1); 486bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 487bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 488bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 489bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l3.locked()); 490bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 491bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 492bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 493bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 494bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 495bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l3; 496bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2, l3) == 2); 497bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 498bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 499bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 500bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l3.locked()); 501bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 502bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 503bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 504bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 505bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 506bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l3; 507bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2, l3) == 3); 508bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 509bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 510bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 511bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l3.locked()); 512bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 513f11ea144609929bb96a05f583ad7c29abd142730Howard Hinnant#endif // _LIBCPP_HAS_NO_VARIADICS 514bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 515