1 // Copyright (C) 2012 Vicente J. Botet Escriba 2 // 3 // Distributed under the Boost Software License, Version 1.0. (See accompanying 4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 5 6 // <boost/thread/locks.hpp> 7 8 // template <class Mutex> class nested_strict_lock; 9 10 // bool owns_lock(Mutex *) const; 11 12 #include <boost/thread/lock_types.hpp> 13 #include <boost/thread/strict_lock.hpp> 14 #include <boost/thread/mutex.hpp> 15 #include <boost/detail/lightweight_test.hpp> 16 main()17int main() 18 { 19 boost::mutex m; 20 boost::mutex m2; 21 { 22 boost::unique_lock<boost::mutex> lk(m); 23 { 24 boost::nested_strict_lock<boost::unique_lock<boost::mutex> > nlk(lk); 25 BOOST_TEST(nlk.owns_lock(&m) == true); 26 BOOST_TEST(!nlk.owns_lock(&m2) == true); 27 } 28 BOOST_TEST(lk.owns_lock() == true && lk.mutex()==&m); 29 } 30 { 31 m.lock(); 32 boost::unique_lock<boost::mutex> lk(m, boost::adopt_lock); 33 { 34 boost::nested_strict_lock<boost::unique_lock<boost::mutex> > nlk(lk); 35 BOOST_TEST(nlk.owns_lock(&m) == true); 36 BOOST_TEST(!nlk.owns_lock(&m2) == true); 37 } 38 BOOST_TEST(lk.owns_lock() == true && lk.mutex()==&m); 39 } 40 { 41 boost::unique_lock<boost::mutex> lk(m, boost::defer_lock); 42 { 43 boost::nested_strict_lock<boost::unique_lock<boost::mutex> > nlk(lk); 44 BOOST_TEST(nlk.owns_lock(&m) == true); 45 BOOST_TEST(!nlk.owns_lock(&m2) == true); 46 } 47 BOOST_TEST(lk.owns_lock() == true && lk.mutex()==&m); 48 } 49 { 50 boost::unique_lock<boost::mutex> lk(m, boost::try_to_lock); 51 { 52 boost::nested_strict_lock<boost::unique_lock<boost::mutex> > nlk(lk); 53 BOOST_TEST(nlk.owns_lock(&m) == true); 54 BOOST_TEST(!nlk.owns_lock(&m2) == true); 55 } 56 BOOST_TEST(lk.owns_lock() == true && lk.mutex()==&m); 57 } 58 59 return boost::report_errors(); 60 } 61