From 2e0f074287943558e9eb6ba225d7277896191fbf Mon Sep 17 00:00:00 2001 From: mutouyun Date: Mon, 7 Nov 2022 22:57:20 +0800 Subject: [PATCH] add: [concur] define concurrent algorithms separately --- .../libipc => include/libconcur}/concurrent.h | 15 +++++--- include/libconcur/def.h | 34 +++++++++++++++++++ include/libipc/def.h | 19 ++--------- test/test_concur_concurrent.cpp | 16 +++++++++ test/test_ipc_concurrent.cpp | 16 --------- 5 files changed, 62 insertions(+), 38 deletions(-) rename {src/libipc => include/libconcur}/concurrent.h (58%) create mode 100644 include/libconcur/def.h create mode 100644 test/test_concur_concurrent.cpp delete mode 100644 test/test_ipc_concurrent.cpp diff --git a/src/libipc/concurrent.h b/include/libconcur/concurrent.h similarity index 58% rename from src/libipc/concurrent.h rename to include/libconcur/concurrent.h index b7371db..d0fb83d 100644 --- a/src/libipc/concurrent.h +++ b/include/libconcur/concurrent.h @@ -1,11 +1,17 @@ +/** + * @file libconcur/concurrent.h + * @author mutouyun (orz@orzz.org) + * @brief Define different policies for concurrent queue + * @date 2022-11-07 + */ +#pragma once #include #include -#include "libipc/def.h" +#include "libconcur/def.h" -LIBIPC_NAMESPACE_BEG_ -namespace concurrent { +LIBCONCUR_NAMESPACE_BEG_ /// @brief The queue index type. using index_t = std::uint32_t; @@ -22,5 +28,4 @@ enum : flag_t { } // namespace state -} // namespace concurrent -LIBIPC_NAMESPACE_END_ +LIBCONCUR_NAMESPACE_END_ diff --git a/include/libconcur/def.h b/include/libconcur/def.h new file mode 100644 index 0000000..4faf35e --- /dev/null +++ b/include/libconcur/def.h @@ -0,0 +1,34 @@ +/** + * @file libconcur/def.h + * @author mutouyun (orz@orzz.org) + * @brief Define the trivial configuration information for concurrency + * @date 2022-11-07 + */ +#pragma once + +#include // std::max_align_t +#include // std::hardware_destructive_interference_size + +#include "libimp/detect_plat.h" + +#define LIBCONCUR_ concur +#define LIBCONCUR_NAMESPACE_BEG_ namespace LIBCONCUR_ { +#define LIBCONCUR_NAMESPACE_END_ } + +LIBCONCUR_NAMESPACE_BEG_ + +/// @brief Constants. + +enum : std::size_t { + /// @brief Minimum offset between two objects to avoid false sharing. + /// @see https://en.cppreference.com/w/cpp/thread/hardware_destructive_interference_size + cache_line_size = +#if defined(LIBIMP_CPP_17) && defined(__cpp_lib_hardware_interference_size) + ( std::hardware_destructive_interference_size < alignof(std::max_align_t) ) ? 64 + : std::hardware_destructive_interference_size, +#else + 64, +#endif +}; + +LIBCONCUR_NAMESPACE_END_ diff --git a/include/libipc/def.h b/include/libipc/def.h index 6690155..f02ee8d 100755 --- a/include/libipc/def.h +++ b/include/libipc/def.h @@ -6,11 +6,8 @@ */ #pragma once -#include // std::max_align_t +#include #include -#include // std::hardware_destructive_interference_size - -#include "libimp/detect_plat.h" #define LIBIPC_ ipc #define LIBIPC_NAMESPACE_BEG_ namespace LIBIPC_ { @@ -18,7 +15,7 @@ LIBIPC_NAMESPACE_BEG_ -// constants +/// @brief Constants. struct prot { using type = std::uint32_t; @@ -38,16 +35,4 @@ struct mode { }; }; -enum : std::size_t { - /// @brief Minimum offset between two objects to avoid false sharing. - /// @see https://en.cppreference.com/w/cpp/thread/hardware_destructive_interference_size - cache_line_size = -#if defined(LIBIMP_CPP_17) && defined(__cpp_lib_hardware_interference_size) - ( std::hardware_destructive_interference_size < alignof(std::max_align_t) ) ? 64 - : std::hardware_destructive_interference_size, -#else - 64, -#endif -}; - LIBIPC_NAMESPACE_END_ diff --git a/test/test_concur_concurrent.cpp b/test/test_concur_concurrent.cpp new file mode 100644 index 0000000..df8e3a7 --- /dev/null +++ b/test/test_concur_concurrent.cpp @@ -0,0 +1,16 @@ + +#include +#include + +#include "gtest/gtest.h" + +#include "libconcur/concurrent.h" + +TEST(concurrent, cache_line_size) { + std::cout << concur::cache_line_size << "\n"; + EXPECT_TRUE(concur::cache_line_size >= alignof(std::max_align_t)); +} + +TEST(concurrent, index_and_flag) { + EXPECT_TRUE(sizeof(concur::index_t) < sizeof(concur::state::flag_t)); +} \ No newline at end of file diff --git a/test/test_ipc_concurrent.cpp b/test/test_ipc_concurrent.cpp deleted file mode 100644 index 45cb1b6..0000000 --- a/test/test_ipc_concurrent.cpp +++ /dev/null @@ -1,16 +0,0 @@ - -#include -#include - -#include "gtest/gtest.h" - -#include "libipc/concurrent.h" - -TEST(concurrent, cache_line_size) { - std::cout << ipc::cache_line_size << "\n"; - EXPECT_TRUE(ipc::cache_line_size >= alignof(std::max_align_t)); -} - -TEST(concurrent, index_and_flag) { - EXPECT_TRUE(sizeof(ipc::concurrent::index_t) < sizeof(ipc::concurrent::state::flag_t)); -} \ No newline at end of file