Beispiel #1
0
int main()
{
  {
    boost::packaged_task<double> p(A(5));
    boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
    //p(3, 'a');
    p();
    BOOST_TEST(f.get() == 5.0);
    p.reset();
    //p(4, 'a');
    p();
    f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
    BOOST_TEST(f.get() == 5.0);
  }
  {
    boost::packaged_task<double> p;
    try
    {
      p.reset();
      BOOST_TEST(false);
    }
    catch (const boost::future_error& e)
    {
      BOOST_TEST(e.code() == boost::system::make_error_code(boost::future_errc::no_state));
    }
  }

  return boost::report_errors();
}
Beispiel #2
0
int main()
{
  {
      typedef int T;
      boost::promise<T> p;
      boost::future<T> f0 = BOOST_THREAD_MAKE_RV_REF(p.get_future());
      boost::future<T> f;
      f = boost::move(f0);
      BOOST_TEST(!f0.valid());
      BOOST_TEST(f.valid());
  }
  {
      typedef int T;
      boost::future<T> f0;
      boost::future<T> f;
      f = boost::move(f0);
      BOOST_TEST(!f0.valid());
      BOOST_TEST(!f.valid());
  }
  {
      typedef int& T;
      boost::promise<T> p;
      boost::future<T> f0 = BOOST_THREAD_MAKE_RV_REF(p.get_future());
      boost::future<T> f;
      f = boost::move(f0);
      BOOST_TEST(!f0.valid());
      BOOST_TEST(f.valid());
  }
  {
      typedef int& T;
      boost::future<T> f0;
      boost::future<T> f;
      f = boost::move(f0);
      BOOST_TEST(!f0.valid());
      BOOST_TEST(!f.valid());
  }
  {
      typedef void T;
      boost::promise<T> p;
      boost::future<T> f0 = BOOST_THREAD_MAKE_RV_REF(p.get_future());
      boost::future<T> f;
      f = boost::move(f0);
      BOOST_TEST(!f0.valid());
      BOOST_TEST(f.valid());
  }
  {
      typedef void T;
      boost::future<T> f0;
      boost::future<T> f;
      f = boost::move(f0);
      BOOST_TEST(!f0.valid());
      BOOST_TEST(!f.valid());
  }


  return boost::report_errors();

}
Beispiel #3
0
int main()
{
  {
    boost::shared_lock<boost::shared_mutex> lk0(m0);
    boost::shared_lock<boost::shared_mutex> lk1(m1);
    lk1 = boost::move(lk0);
    BOOST_TEST(lk1.mutex() == &m0);
    BOOST_TEST(lk1.owns_lock() == true);
    BOOST_TEST(lk0.mutex() == 0);
    BOOST_TEST(lk0.owns_lock() == false);
  }
  {

    boost::shared_lock<boost::shared_mutex> lk1;
    lk1 = BOOST_THREAD_MAKE_RV_REF(boost::shared_lock<boost::shared_mutex>(m0));
    BOOST_TEST(lk1.mutex() == &m0);
    BOOST_TEST(lk1.owns_lock() == true);
  }
  {
    boost::unique_lock<boost::shared_mutex> lk0(m0);
    boost::shared_lock<boost::shared_mutex> lk1(m1);
    lk1 = BOOST_THREAD_MAKE_RV_REF(boost::shared_lock<boost::shared_mutex>(boost::move(lk0)));
    BOOST_TEST(lk1.mutex() == &m0);
    BOOST_TEST(lk1.owns_lock() == true);
    BOOST_TEST(lk0.mutex() == 0);
    BOOST_TEST(lk0.owns_lock() == false);
  }
  {

    boost::shared_lock<boost::shared_mutex> lk1;
    lk1 = BOOST_THREAD_MAKE_RV_REF(boost::shared_lock<boost::shared_mutex>(boost::unique_lock<boost::shared_mutex>(m0)));
    BOOST_TEST(lk1.mutex() == &m0);
    BOOST_TEST(lk1.owns_lock() == true);
  }
  {
    boost::upgrade_lock<boost::shared_mutex> lk0(m0);
    boost::shared_lock<boost::shared_mutex> lk1(m1);
    lk1 = BOOST_THREAD_MAKE_RV_REF(boost::shared_lock<boost::shared_mutex>(boost::move(lk0)));
    BOOST_TEST(lk1.mutex() == &m0);
    BOOST_TEST(lk1.owns_lock() == true);
    BOOST_TEST(lk0.mutex() == 0);
    BOOST_TEST(lk0.owns_lock() == false);
  }
  {

    boost::shared_lock<boost::shared_mutex> lk1;
    lk1 = BOOST_THREAD_MAKE_RV_REF(boost::shared_lock<boost::shared_mutex>(boost::upgrade_lock<boost::shared_mutex>(m0)));
    BOOST_TEST(lk1.mutex() == &m0);
    BOOST_TEST(lk1.owns_lock() == true);
  }
  return boost::report_errors();

}
Beispiel #4
0
 ~reverse_lock()
 {
   if (mtx) {
     mtx->lock();
     m = BOOST_THREAD_MAKE_RV_REF(Lock(*mtx, adopt_lock));
   }
 }
Beispiel #5
0
int main()
{
  {
  boost::unique_lock<boost::mutex> lk0(m);
  boost::unique_lock<boost::mutex> lk( (boost::move(lk0)));
  BOOST_TEST(lk.mutex() == &m);
  BOOST_TEST(lk.owns_lock() == true);
  BOOST_TEST(lk0.mutex() == 0);
  BOOST_TEST(lk0.owns_lock() == false);
  }
  {
  boost::unique_lock<boost::mutex> lk( (BOOST_THREAD_MAKE_RV_REF(boost::unique_lock<boost::mutex>(m))));
  BOOST_TEST(lk.mutex() == &m);
  BOOST_TEST(lk.owns_lock() == true);
  }
  {
  boost::unique_lock<boost::mutex> lk0(m, boost::defer_lock);
  boost::unique_lock<boost::mutex> lk( (boost::move(lk0)));
  BOOST_TEST(lk.mutex() == &m);
  BOOST_TEST(lk.owns_lock() == false);
  BOOST_TEST(lk0.mutex() == 0);
  BOOST_TEST(lk0.owns_lock() == false);
  }
  {
  boost::unique_lock<boost::mutex> lk0(m, boost::defer_lock);
  lk0.release();
  boost::unique_lock<boost::mutex> lk( (boost::move(lk0)));
  BOOST_TEST(lk.mutex() == 0);
  BOOST_TEST(lk.owns_lock() == false);
  BOOST_TEST(lk0.mutex() == 0);
  BOOST_TEST(lk0.owns_lock() == false);
  }

  return boost::report_errors();
}
Beispiel #6
0
 all_futures_lock(std::vector<registered_waiter>& waiters) :
   count(waiters.size()), locks(new boost::unique_lock<boost::mutex>[count])
 {
   for (count_type_portable i = 0; i < count; ++i)
   {
     locks[i] = BOOST_THREAD_MAKE_RV_REF(boost::unique_lock<boost::mutex>(waiters[i].future_->mutex()));
   }
 }
Beispiel #7
0
int main()
{
  {
      boost::packaged_task<BOOST_THREAD_DETAIL_SIGNATURE> p(A(5));
      boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
      //p(3, 'a');
      p();
      BOOST_TEST(f.get() == 5.0);
  }
  {
      boost::packaged_task<BOOST_THREAD_DETAIL_SIGNATURE> p(A(5));
      boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
      try
      {
          f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
          BOOST_TEST(false);
      }
      catch (const boost::future_error& e)
      {
          BOOST_TEST(e.code() ==  boost::system::make_error_code(boost::future_errc::future_already_retrieved));
      }
  }
  {
      boost::packaged_task<BOOST_THREAD_DETAIL_SIGNATURE> p;
      try
      {
          boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
          BOOST_TEST(false);
      }
      catch (const boost::future_error& e)
      {
          BOOST_TEST(e.code() ==  boost::system::make_error_code(boost::future_errc::no_state));
      }
  }

  return boost::report_errors();
}
Beispiel #8
0
int main() {
boost::packaged_task<int> pt(calculate_the_answer_to_life_the_universe_and_everything);

//boost::unique_future<int> fi = BOOST_THREAD_MAKE_RV_REF(pt.get_future());
boost::unique_future<int> fi((BOOST_THREAD_MAKE_RV_REF(pt.get_future())));

boost::thread task(boost::move(pt)); // launch task on a thread

fi.wait(); // wait for it to finish

//assert(fi.is_ready());
//assert(fi.has_value());
//assert(!fi.has_exception());
//assert(fi.get_state()==boost::future_state::ready);
//assert(fi.get()==42);
}
int main()
{
  typedef boost::csbl::vector<boost::thread> thread_vector;
  {
    thread_vector threads;
    threads.reserve(10);
    for (int i = 0; i < 10; ++i)
    {
      boost::thread th(&increment_count);
      threads.push_back(boost::move(th));
    }
    join_all(threads);
  }
  count = 0;
  {
    thread_vector threads;
    threads.reserve(10);
    for (int i = 0; i < 10; ++i)
    {
      threads.push_back(BOOST_THREAD_MAKE_RV_REF(boost::thread(&increment_count)));
    }
    join_all(threads);
  }
  count = 0;
  {
    thread_vector threads;
    threads.reserve(10);
    for (int i = 0; i < 10; ++i)
    {
      threads.emplace_back(&increment_count);
    }
    join_all(threads);
  }
  count = 0;
  {
    thread_vector threads;
    threads.reserve(10);
    for (int i = 0; i < 10; ++i)
    {
      threads.emplace_back(&increment_count);
    }
    interrupt_all(threads);
    join_all(threads);
  }

  return boost::report_errors();
}
Beispiel #10
0
int main()
{
  {
  boost::upgrade_lock<boost::shared_mutex> lk0(m);
  boost::upgrade_lock<boost::shared_mutex> lk( (boost::move(lk0)));
  BOOST_TEST(lk.mutex() == &m);
  BOOST_TEST(lk.owns_lock() == true);
  BOOST_TEST(lk0.mutex() == 0);
  BOOST_TEST(lk0.owns_lock() == false);
  }
  {
  boost::upgrade_lock<boost::shared_mutex> lk( (BOOST_THREAD_MAKE_RV_REF(boost::upgrade_lock<boost::shared_mutex>(m))));
  BOOST_TEST(lk.mutex() == &m);
  BOOST_TEST(lk.owns_lock() == true);
  }

  return boost::report_errors();
}
Beispiel #11
0
int main()
{
  {
    boost::packaged_task<BOOST_THREAD_DETAIL_SIGNATURE> p0(A(5));
    boost::packaged_task<BOOST_THREAD_DETAIL_SIGNATURE> p = boost::move(p0);
    BOOST_TEST(!p0.valid());
    BOOST_TEST(p.valid());
    boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
    //p(3, 'a');
    p();
    BOOST_TEST(f.get() == 5.0);
  }
  {
    boost::packaged_task<BOOST_THREAD_DETAIL_SIGNATURE> p0;
    boost::packaged_task<BOOST_THREAD_DETAIL_SIGNATURE> p = boost::move(p0);
    BOOST_TEST(!p0.valid());
    BOOST_TEST(!p.valid());
  }

  return boost::report_errors();
}
Beispiel #12
0
boost::future<void> void_compute()
{
  return BOOST_THREAD_MAKE_RV_REF(boost::make_ready_future());
}
Beispiel #13
0
int main()
{
#if defined BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS
  BOOST_TEST(test_alloc_base::count == 0);
  {
      typedef int T;
      boost::future<T> f;
      {
          boost::promise<T> p(boost::allocator_arg, test_allocator<T>());
          BOOST_TEST(test_alloc_base::count == 1);
          f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
          BOOST_TEST(test_alloc_base::count == 1);
          BOOST_TEST(f.valid());
      }
      BOOST_TEST(test_alloc_base::count == 1);
      BOOST_TEST(f.valid());
  }
  BOOST_TEST(test_alloc_base::count == 0);
  {
      typedef int& T;
      boost::future<T> f;
      {
          boost::promise<T> p(boost::allocator_arg, test_allocator<int>());
          BOOST_TEST(test_alloc_base::count == 1);
          f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
          BOOST_TEST(test_alloc_base::count == 1);
          BOOST_TEST(f.valid());
      }
      BOOST_TEST(test_alloc_base::count == 1);
      BOOST_TEST(f.valid());
  }
  BOOST_TEST(test_alloc_base::count == 0);
  {
      typedef void T;
      boost::future<T> f;
      {
          boost::promise<T> p(boost::allocator_arg, test_allocator<T>());
          BOOST_TEST(test_alloc_base::count == 1);
          f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
          BOOST_TEST(test_alloc_base::count == 1);
          BOOST_TEST(f.valid());
      }
      BOOST_TEST(test_alloc_base::count == 1);
      BOOST_TEST(f.valid());
  }
  BOOST_TEST(test_alloc_base::count == 0);
#endif
  {
      typedef int T;
      boost::future<T> f;
      {
          boost::promise<T> p;
          f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
          BOOST_TEST(f.valid());
      }
      BOOST_TEST(f.valid());
  }
  {
      typedef int& T;
      boost::future<T> f;
      {
          boost::promise<T> p;
          f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
          BOOST_TEST(f.valid());
      }
      BOOST_TEST(f.valid());
  }
  {
      typedef void T;
      boost::future<T> f;
      {
          boost::promise<T> p;
          f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
          BOOST_TEST(f.valid());
      }
      BOOST_TEST(f.valid());
  }
  return boost::report_errors();
}
Beispiel #14
0
int main()
{
  {
    boost::packaged_task<BOOST_THREAD_DETAIL_SIGNATURE_2> p(A(5));
    boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
    boost::thread(func0, boost::move(p)).detach();
#else
    //p();
#endif
    //BOOST_TEST(f.get() == 5.0);
  }
  {
    boost::packaged_task<BOOST_THREAD_DETAIL_SIGNATURE_2> p(A(0));
    boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
    boost::thread(func1, boost::move(p)).detach();
#endif
    try
    {
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
#else
      p();
#endif
      f.get();
      BOOST_TEST(false);
    }
    catch (const E& e)
    {
      BOOST_TEST(e.data == 6);
    }
    catch (...)
    {
      BOOST_TEST(false);
    }
  }
  {
    boost::packaged_task<BOOST_THREAD_DETAIL_SIGNATURE_2> p(A(5));
    boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future());
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
    boost::thread t(func2, boost::move(p));
#else
    p();
#endif
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
    BOOST_TEST(f.get() == 105);
    t.join();
#else
    BOOST_TEST(f.get() == 5.0);
#endif
  }
  {
    boost::packaged_task<BOOST_THREAD_DETAIL_SIGNATURE_2> p;
#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
    boost::thread t(func3, boost::move(p));
    t.join();
#else
    try
    {
  #if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
    p(3, 'a');
  #else
    p();
  #endif
    }
    catch (const boost::future_error& e)
    {
      BOOST_TEST(e.code() == boost::system::make_error_code(boost::future_errc::no_state));
    }
#endif
  }

  return boost::report_errors();
}