// Copyright 2019 Hans Dembinski // // 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) #include #include #include #include "throw_exception.hpp" #include #include #include #include #include #include #include using namespace boost::histogram; constexpr auto n_fill = 1000000; template void tests() { { storage_adaptor s; s.reset(1); auto fill = [&s]() { for (unsigned i = 0; i < n_fill; ++i) { ++s[0]; s[0] += 1; } }; std::thread t1(fill); std::thread t2(fill); std::thread t3(fill); std::thread t4(fill); t1.join(); t2.join(); t3.join(); t4.join(); BOOST_TEST_EQ(s[0], 4 * 2 * n_fill); } } int main() { using ts_int = accumulators::thread_safe; tests>(); tests>(); tests>(); // stdlib maps are not thread-safe and not supported return boost::report_errors(); }