xfail dg-final "Sunk statements: 5" on hppa*64*-*-*
[official-gcc.git] / libstdc++-v3 / testsuite / 30_threads / try_lock / 5.cc
blobb9ce1cc9b90e32c1fe1dadd8d60b0c10bf80f010
1 // { dg-do run }
2 // { dg-additional-options "-pthread" { target pthread } }
3 // { dg-require-effective-target c++11 }
4 // { dg-require-gthreads "" }
6 #include <mutex>
7 #include <testsuite_hooks.h>
9 struct Lockable
11 static int tries;
13 void lock() { }
14 void unlock() { }
15 bool try_lock() { return ++tries != 2; }
18 int Lockable::tries = 0;
20 void test01()
22 Lockable l1, l2, l3;
23 std::mutex m1, m2;
25 VERIFY( std::try_lock(l1, l2, l3) == 1 );
26 VERIFY( Lockable::tries == 2 );
28 Lockable::tries = 0;
29 VERIFY( std::try_lock(m1, l1, l2, l3) == 2 );
30 VERIFY( Lockable::tries == 2 );
32 Lockable::tries = 0;
33 VERIFY( std::try_lock(l1, l2, l3, m1) == 1 );
34 VERIFY( Lockable::tries == 2 );
36 Lockable::tries = 0;
37 VERIFY( std::try_lock(m1, l1, l2, l3, m2) == 2 );
38 VERIFY( Lockable::tries == 2 );
41 int main()
43 test01();