Внутренне ли std :: обещает использовать std :: condition_variable, чтобы уведомить связанный std :: future? - PullRequest
5 голосов
/ 07 июня 2019

Мой вопрос: std::promise уведомляет ассоциированного std::future с помощью std::condition_variable?

Я искал исходный код std::promise и нашел веб-сайт . Но я не видел, что std::promise имеет std::condition_variable в своих данных.

1 Ответ

3 голосов
/ 07 июня 2019

Вот ответ для libc ++.

Поиск condition_variable в <future> дал ровно один результат:

// lines 531 -- 538
class _LIBCPP_TYPE_VIS _LIBCPP_AVAILABILITY_FUTURE __assoc_sub_state
    : public __shared_count
{
protected:
    exception_ptr __exception_;
    mutable mutex __mut_;
    mutable condition_variable __cv_;
    unsigned __state_;

Здесь вводится __assoc_sub_state. Это базовый класс для __assoc_state:

// lines 617 -- 619
template <class _Rp>
class _LIBCPP_AVAILABILITY_FUTURE __assoc_state
    : public __assoc_sub_state

И, наконец, __assoc_state<_Rp>* является одновременно членом future<_Rp>:

// lines 1082 -- 1085
template <class _Rp>
class _LIBCPP_TEMPLATE_VIS _LIBCPP_AVAILABILITY_FUTURE future
{
    __assoc_state<_Rp>* __state_;

и член promise<_Rp>:

// lines 1360 -- 1363
template <class _Rp>
class _LIBCPP_TEMPLATE_VIS _LIBCPP_AVAILABILITY_FUTURE promise
{
    __assoc_state<_Rp>* __state_;

Так что да, libc ++ std::promise внутренне использует std::condition_variable для уведомления ассоциированного std::future.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...