/* TAGS: big */ /* VERIFY_OPTS: -o nofail:malloc */ /* CC_OPTS: -Dgmtime_r=gmtime -Dlocaltime_r=localtime -DBOOST_HAS_PTHREADS -DBOOST_THREAD_POSIX -DPOSIX_THREADS -D__linux -D_SC_PAGESIZE -I $BOOST/libs/thread/include/ -I test/termination -I $BOOST/libs/config/include/ -I $BOOST/libs/throw_exception/include -I $BOOST/libs/assert/include/ -I $BOOST/libs/core/include/ -I $BOOST/libs/system/include/ -I $BOOST/libs/type_traits/include/ -I $BOOST/libs/static_assert/include/ -I $BOOST/libs/move/include/ -I $BOOST/libs/date_time/include/ -I $BOOST/libs/smart_ptr/include/ -I $BOOST/libs/predef/include -I $BOOST/libs/utility/include/ -I $BOOST/libs/mpl/include/ -I$BOOST/libs/preprocessor/include/ -I $BOOST/libs/numeric/conversion/include/ -I $BOOST/libs/chrono/include/ -I $BOOST/libs/ratio/include/ -I $BOOST/libs/integer/include/ -I $BOOST/libs/bind/include/ -I $BOOST/libs/io/include/ -I $BOOST/libs/container_hash/include/ -I $BOOST/libs/detail/include/ -I $BOOST/libs/atomic/include/ -I $BOOST/libs/tuple/include/ -I $BOOST/libs/exception/include/ -I $BOOST/libs/iterator/include/ -I $BOOST/libs/optional/include/ -I $BOOST/libs/function/include/ -I $BOOST/libs/type_index/include/ -I $BOOST/libs/algorithm/include -I $BOOST/libs/range/include -I $BOOST/libs/concept_check/include/ -I $BOOST/libs/lexical_cast/include/ -I $BOOST/libs/array/include/ -I $BOOST/libs/container/include/ -I $BOOST/libs/math/include */ /* EXTRA_SRCS: $BOOST/libs/thread/src/pthread/thread.cpp $BOOST/libs/thread/src/pthread/once_atomic.cpp */ #include #include #include // V: 2@safety // V: 3@safety CC_OPT: -DNTHR=3 // V: 2@local V_OPT: --nontermination local // V: 3@local V_OPT: --nontermination local CC_OPT: -DNTHR=3 // V: 2@global V_OPT: --nontermination global // V: 3@global V_OPT: --nontermination global CC_OPT: -DNTHR=3 #ifdef NTHR const int nthr = NTHR; #else const int nthr = 2; #endif int main() { boost::latch latch{ 1 }; std::atomic< int > cnt{ 0 }; auto worker = [&] { latch.wait(); assert( cnt == 1 ); }; std::vector< std::thread > thrs; thrs.reserve( nthr ); for ( int i = 0; i < nthr; ++i ) thrs.emplace_back( worker ); ++cnt; latch.count_down(); for ( auto &t : thrs ) t.join(); }