[v3 patch] future_status::deferred for std::async futures

Jonathan Wakely jwakely.gcc@gmail.com
Wed Nov 20 20:59:00 GMT 2013


This implements a missing std::async feature and also implements LWG 2100.

The State_base and Async_state_common types are replaced (but still
exported from libstdc++.so for compatibility) with new versions with
an extra virtual function.

Tested x86_64-linux, committed to trunk.

2013-11-20  Jonathan Wakely  <jwakely.gcc@gmail.com>

        PR libstdc++/49204
        * include/std/future (__future_base::_State_base): Rename to
        __future_base::_State_baseV2.
        (__future_base::_State_baseV2::~_State_baseV2): Define as defaulted.
        (__future_base::_State_baseV2::_M_run_deferred): Rename to
        _M_complete_async.
        (__future_base::_State_baseV2::_M_has_deferred): Add new virtual.
        (__future_base::_State_baseV2::wait_for): Call _M_has_deferred() to
        test for a deferred function, or call _M_complete_async() to join an
        async thread that has made the shared state ready.
        (__future_base::_State_baseV2::wait_until): Likewise.
        (__future_base::_Async_state_common): Rename to _Async_state_commonV2.
        (__future_base::_Async_state_commonV2::_M_run_deferred): Rename to
        _M_complete_async.
        * src/c++11/compatibility-thread-c++0x.cc (__future_base::_State_base):
        Export old definition.
        (__future_base::_Async_state_common): Likewise.
        * src/c++11/future.cc (__future_base::_State_base::~_State_base):
        Remove.
        * doc/xml/manual/status_cxx2011.xml: Update status.
        * testsuite/30_threads/async/async.cc: Test future_status::timeout
        and future_status::ready.
        * testsuite/30_threads/async/sync.cc: Test future_status::deferred.



More information about the Libstdc++ mailing list