1 //===----------------------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
9 // Copyright (C) 2011 Vicente J. Botet Escriba
11 // Distributed under the Boost Software License, Version 1.0. (See accompanying
12 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
14 // <boost/thread/thread.hpp>
19 #define BOOST_THREAD_VESRION 3
20 #include <boost/thread/thread_only.hpp>
21 #include <boost/thread/mutex.hpp>
22 #include <boost/thread/locks.hpp>
27 #include <boost/detail/lightweight_test.hpp>
54 BOOST_TEST(alive_
== 1);
55 //BOOST_TEST(n_alive == 1);
61 bool G::op_run
= false;
63 boost::thread
* resource_deadlock_would_occur_th
=0;
64 boost::mutex resource_deadlock_would_occur_mtx
;
65 void resource_deadlock_would_occur_tester()
69 boost::unique_lock
<boost::mutex
> lk(resource_deadlock_would_occur_mtx
);
70 resource_deadlock_would_occur_th
->join();
73 catch (boost::system::system_error
& e
)
75 BOOST_TEST(e
.code().value() == boost::system::errc::resource_deadlock_would_occur
);
79 BOOST_TEST(false&&"exception thrown");
86 boost::thread
t0( (G()));
87 BOOST_TEST(t0
.joinable());
89 BOOST_TEST(!t0
.joinable());
93 boost::unique_lock
<boost::mutex
> lk(resource_deadlock_would_occur_mtx
);
94 boost::thread
t0( resource_deadlock_would_occur_tester
);
95 resource_deadlock_would_occur_th
= &t0
;
96 BOOST_TEST(t0
.joinable());
98 boost::this_thread::sleep_for(boost::chrono::milliseconds(100));
99 boost::unique_lock
<boost::mutex
> lk2(resource_deadlock_would_occur_mtx
);
101 BOOST_TEST(!t0
.joinable());
105 boost::thread
t0( (G()));
112 catch (boost::system::system_error
& e
)
114 BOOST_TEST(e
.code().value() == boost::system::errc::invalid_argument
);
118 boost::thread
t0( (G()));
119 BOOST_TEST(t0
.joinable());
126 catch (boost::system::system_error
& e
)
128 BOOST_TEST(e
.code().value() == boost::system::errc::invalid_argument
);
133 return boost::report_errors();