]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/thread/test/test_4882.cpp
1 // Copyright (C) 2010 Vicente Botet
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)
6 #define BOOST_THREAD_VERSION 2
7 //#define BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN
8 //#define BOOST_THREAD_USES_LOG
10 #include <boost/thread/thread_only.hpp>
11 #include <boost/thread/shared_mutex.hpp>
12 #include <boost/detail/no_exceptions_support.hpp>
13 //#include <boost/thread/detail/log.hpp>
15 boost::shared_mutex mutex
;
19 //BOOST_THREAD_LOG << "<thrd" << BOOST_THREAD_END_LOG;
22 for (int i
=0; i
<10; ++i
)
24 #ifndef BOOST_THREAD_USES_CHRONO
25 boost::system_time timeout
= boost::get_system_time() + boost::posix_time::milliseconds(50);
27 if (mutex
.timed_lock(timeout
))
29 //BOOST_THREAD_LOG << "<thrd" << " i="<<i << BOOST_THREAD_END_LOG;
30 boost::this_thread::sleep(boost::posix_time::milliseconds(10));
32 //BOOST_THREAD_LOG << "<thrd" << " i="<<i << BOOST_THREAD_END_LOG;
35 boost::chrono::system_clock::time_point timeout
= boost::chrono::system_clock::now() + boost::chrono::milliseconds(50);
37 //BOOST_THREAD_LOG << "<thrd" << " i="<<i << BOOST_THREAD_END_LOG;
38 if (mutex
.try_lock_until(timeout
))
40 //BOOST_THREAD_LOG << "<thrd" << " i="<<i << BOOST_THREAD_END_LOG;
41 boost::this_thread::sleep_for(boost::chrono::milliseconds(10));
43 //BOOST_THREAD_LOG << "<thrd" << " i="<<i << BOOST_THREAD_END_LOG;
48 BOOST_CATCH (boost::lock_error
& )
50 //BOOST_THREAD_LOG << "lock_error exception thrd>" << BOOST_THREAD_END_LOG;
54 //BOOST_THREAD_LOG << "exception thrd>" << BOOST_THREAD_END_LOG;
57 //BOOST_THREAD_LOG << "thrd>" << BOOST_THREAD_END_LOG;
62 //BOOST_THREAD_LOG << "<main" << BOOST_THREAD_END_LOG;
63 const int nrThreads
= 20;
64 boost::thread
* threads
[nrThreads
];
66 for (int i
= 0; i
< nrThreads
; ++i
)
67 threads
[i
] = new boost::thread(&thread
);
69 for (int i
= 0; i
< nrThreads
; ++i
)
72 //BOOST_THREAD_LOG << "main" << BOOST_THREAD_END_LOG;
74 //BOOST_THREAD_LOG << "main" << BOOST_THREAD_END_LOG;
76 //BOOST_THREAD_LOG << "main>" << BOOST_THREAD_END_LOG;