// { dg-do run } // { dg-additional-options "-pthread" { target pthread } } // { dg-require-effective-target c++11 } // { dg-require-gthreads "" } #include #include struct Lockable { static int tries; void lock() { } void unlock() { } bool try_lock() { return ++tries != 2; } }; int Lockable::tries = 0; void test01() { Lockable l1, l2, l3; std::mutex m1, m2; VERIFY( std::try_lock(l1, l2, l3) == 1 ); VERIFY( Lockable::tries == 2 ); Lockable::tries = 0; VERIFY( std::try_lock(m1, l1, l2, l3) == 2 ); VERIFY( Lockable::tries == 2 ); Lockable::tries = 0; VERIFY( std::try_lock(l1, l2, l3, m1) == 1 ); VERIFY( Lockable::tries == 2 ); Lockable::tries = 0; VERIFY( std::try_lock(m1, l1, l2, l3, m2) == 2 ); VERIFY( Lockable::tries == 2 ); } int main() { test01(); }