• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2018, 2020 Peter Dimov
2 // Distributed under the Boost Software License, Version 1.0.
3 // https://www.boost.org/LICENSE_1_0.txt)
4 
5 #include <boost/smart_ptr/detail/atomic_count.hpp>
6 #include <boost/smart_ptr/detail/lightweight_thread.hpp>
7 #include <boost/bind/bind.hpp>
8 #include <boost/core/lightweight_test.hpp>
9 
10 static boost::detail::atomic_count count( 0 );
11 
f(int n)12 void f( int n )
13 {
14     for( int i = 0; i < n; ++i )
15     {
16         ++count;
17     }
18 }
19 
main()20 int main()
21 {
22     int const N = 100000; // iterations
23     int const M = 8;      // threads
24 
25     boost::detail::lw_thread_t th[ M ] = {};
26 
27     for( int i = 0; i < M; ++i )
28     {
29         boost::detail::lw_thread_create( th[ i ], boost::bind( f, N ) );
30     }
31 
32     for( int i = 0; i < M; ++i )
33     {
34         boost::detail::lw_thread_join( th[ i ] );
35     }
36 
37     BOOST_TEST_EQ( count, N * M );
38 
39     return boost::report_errors();
40 }
41