upgradable_mutex_test.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 174 行
CPP
174 行
////////////////////////////////////////////////////////////////////////////////// (C) Copyright Ion Gaztanaga 2004-2007. Distributed under the Boost// Software License, Version 1.0. (See accompanying file// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)//// See http://www.boost.org/libs/interprocess for documentation.////////////////////////////////////////////////////////////////////////////////#include <boost/interprocess/detail/config_begin.hpp>#include "mutex_test_template.hpp"#include "sharable_mutex_test_template.hpp"#include <boost/interprocess/sync/interprocess_upgradable_mutex.hpp>#include <boost/interprocess/sync/scoped_lock.hpp>#include <boost/interprocess/sync/sharable_lock.hpp>#include <boost/interprocess/sync/upgradable_lock.hpp>#include <boost/date_time/posix_time/posix_time_types.hpp>#include "util.hpp"int main (){ using namespace boost::interprocess; test::test_all_lock<interprocess_upgradable_mutex>(); test::test_all_mutex<true, interprocess_upgradable_mutex>(); test::test_all_sharable_mutex<true, interprocess_upgradable_mutex>(); //Test lock transition { typedef interprocess_upgradable_mutex Mutex; Mutex mut; Mutex mut2; //Conversions to scoped_lock { scoped_lock<Mutex> lock(mut); scoped_lock<Mutex> e_lock(detail::move_impl(lock)); lock.swap(detail::move_impl(e_lock)); } { scoped_lock<Mutex> lock(mut); scoped_lock<Mutex> e_lock(mut2); e_lock = detail::move_impl(lock); } { upgradable_lock<Mutex> u_lock(mut); //This calls unlock_upgradable_and_lock() scoped_lock<Mutex> e_lock(detail::move_impl(u_lock)); } { upgradable_lock<Mutex> u_lock(mut); //This calls unlock_upgradable_and_lock() scoped_lock<Mutex> e_lock(mut2); scoped_lock<Mutex> moved(detail::move_impl(u_lock)); e_lock = detail::move_impl(moved); } { upgradable_lock<Mutex> u_lock(mut); //This calls try_unlock_upgradable_and_lock() scoped_lock<Mutex> e_lock(detail::move_impl(u_lock), try_to_lock); } { upgradable_lock<Mutex> u_lock(mut); //This calls try_unlock_upgradable_and_lock() scoped_lock<Mutex> e_lock(mut2); scoped_lock<Mutex> moved(detail::move_impl(u_lock), try_to_lock); e_lock = detail::move_impl(moved); } { boost::posix_time::ptime t = test::delay(100); upgradable_lock<Mutex> u_lock(mut); //This calls timed_unlock_upgradable_and_lock() scoped_lock<Mutex> e_lock(detail::move_impl(u_lock), t); } { boost::posix_time::ptime t = test::delay(100); upgradable_lock<Mutex> u_lock(mut); //This calls timed_unlock_upgradable_and_lock() scoped_lock<Mutex> e_lock(mut2); scoped_lock<Mutex> moved(detail::move_impl(u_lock), t); e_lock = detail::move_impl(moved); } { sharable_lock<Mutex> s_lock(mut); //This calls try_unlock_sharable_and_lock() scoped_lock<Mutex> e_lock(detail::move_impl(s_lock), try_to_lock); } { sharable_lock<Mutex> s_lock(mut); //This calls try_unlock_sharable_and_lock() scoped_lock<Mutex> e_lock(mut2); scoped_lock<Mutex> moved(detail::move_impl(s_lock), try_to_lock); e_lock = detail::move_impl(moved); } //Conversions to upgradable_lock { upgradable_lock<Mutex> lock(mut); upgradable_lock<Mutex> u_lock(detail::move_impl(lock)); lock.swap(detail::move_impl(u_lock)); } { upgradable_lock<Mutex> lock(mut); upgradable_lock<Mutex> u_lock(mut2); upgradable_lock<Mutex> moved(detail::move_impl(lock)); u_lock = detail::move_impl(moved); } { sharable_lock<Mutex> s_lock(mut); //This calls unlock_sharable_and_lock_upgradable() upgradable_lock<Mutex> u_lock(detail::move_impl(s_lock), try_to_lock); } { sharable_lock<Mutex> s_lock(mut); //This calls unlock_sharable_and_lock_upgradable() upgradable_lock<Mutex> u_lock(mut2); upgradable_lock<Mutex> moved(detail::move_impl(s_lock), try_to_lock); u_lock = detail::move_impl(moved); } { scoped_lock<Mutex> e_lock(mut); //This calls unlock_and_lock_upgradable() upgradable_lock<Mutex> u_lock(detail::move_impl(e_lock)); } { scoped_lock<Mutex> e_lock(mut); //This calls unlock_and_lock_upgradable() upgradable_lock<Mutex> u_lock(mut2); upgradable_lock<Mutex> moved(detail::move_impl(e_lock)); u_lock = detail::move_impl(moved); } //Conversions to sharable_lock { sharable_lock<Mutex> lock(mut); sharable_lock<Mutex> s_lock(detail::move_impl(lock)); lock.swap(detail::move_impl(s_lock)); } { sharable_lock<Mutex> lock(mut); sharable_lock<Mutex> s_lock(mut2); sharable_lock<Mutex> moved(detail::move_impl(lock)); s_lock = detail::move_impl(moved); } { upgradable_lock<Mutex> u_lock(mut); //This calls unlock_upgradable_and_lock_sharable() sharable_lock<Mutex> s_lock(detail::move_impl(u_lock)); } { upgradable_lock<Mutex> u_lock(mut); //This calls unlock_upgradable_and_lock_sharable() sharable_lock<Mutex> s_lock(mut2); sharable_lock<Mutex> moved(detail::move_impl(u_lock)); s_lock = detail::move_impl(moved); } { scoped_lock<Mutex> e_lock(mut); //This calls unlock_and_lock_sharable() sharable_lock<Mutex> s_lock(detail::move_impl(e_lock)); } { scoped_lock<Mutex> e_lock(mut); //This calls unlock_and_lock_sharable() sharable_lock<Mutex> s_lock(mut2); sharable_lock<Mutex> moved(detail::move_impl(e_lock)); s_lock = detail::move_impl(moved); } } return 0;}#include <boost/interprocess/detail/config_end.hpp>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?