named_recursive_mutex_test.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 102 行

CPP
102
字号
////////////////////////////////////////////////////////////////////////////////// (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 <boost/interprocess/sync/named_recursive_mutex.hpp>#include <boost/interprocess/sync/scoped_lock.hpp>#include <boost/date_time/posix_time/posix_time_types.hpp>#include "mutex_test_template.hpp"#include "named_creation_template.hpp"#include <string>#include "get_process_id_name.hpp"using namespace boost::interprocess;struct mutex_deleter{   ~mutex_deleter()   {  named_recursive_mutex::remove(test::get_process_id_name()); }};//This wrapper is necessary to have a default constructor//in generic mutex_test_template functionsclass named_recursive_mutex_lock_test_wrapper   : public named_recursive_mutex{   public:   named_recursive_mutex_lock_test_wrapper()      :  named_recursive_mutex(open_or_create, test::get_process_id_name())   {  ++count_;   }   ~named_recursive_mutex_lock_test_wrapper()   {      if(--count_){         detail::interprocess_tester::            dont_close_on_destruction(static_cast<named_recursive_mutex&>(*this));      }   }   static int count_;};int named_recursive_mutex_lock_test_wrapper::count_ = 0;//This wrapper is necessary to have a common constructor//in generic named_creation_template functionsclass named_mutex_creation_test_wrapper   : public mutex_deleter, public named_recursive_mutex{   public:   named_mutex_creation_test_wrapper(create_only_t)      :  named_recursive_mutex(create_only, test::get_process_id_name())   {  ++count_;   }   named_mutex_creation_test_wrapper(open_only_t)      :  named_recursive_mutex(open_only, test::get_process_id_name())   {  ++count_;   }   named_mutex_creation_test_wrapper(open_or_create_t)      :  named_recursive_mutex(open_or_create, test::get_process_id_name())   {  ++count_;   }   ~named_mutex_creation_test_wrapper()   {      if(--count_){         detail::interprocess_tester::            dont_close_on_destruction(static_cast<named_recursive_mutex&>(*this));      }   }   static int count_;};int named_mutex_creation_test_wrapper::count_ = 0;int main (){   try{      named_recursive_mutex::remove(test::get_process_id_name());      test::test_named_creation<named_mutex_creation_test_wrapper>();      test::test_all_lock<named_recursive_mutex_lock_test_wrapper>();      test::test_all_mutex<false, named_recursive_mutex_lock_test_wrapper>();      test::test_all_recursive_lock<named_recursive_mutex_lock_test_wrapper>();   }   catch(std::exception &ex){      named_recursive_mutex::remove(test::get_process_id_name());      std::cout << ex.what() << std::endl;      return 1;   }   named_recursive_mutex::remove(test::get_process_id_name());   return 0;}#include <boost/interprocess/detail/config_end.hpp>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?