std::promise 是否在内部使用 std::condition_variable 通知关联的 std::future?
Does std::promise internally use std::condition_variable to notify the associated std::future?
我的问题是 std::promise
是否通过使用 std::condition_variable
通知关联的 std::future
?
我搜索了std::promise
的源代码,找到了这个website。但是我没有看到 std::promise
在其成员数据中有 std::condition_variable
。
这是 libc++ 的答案。
在 <future>
中搜索 condition_variable
只返回一个结果:
// 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
。它是 class 的基础 __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
。
我的问题是 std::promise
是否通过使用 std::condition_variable
通知关联的 std::future
?
我搜索了std::promise
的源代码,找到了这个website。但是我没有看到 std::promise
在其成员数据中有 std::condition_variable
。
这是 libc++ 的答案。
在 <future>
中搜索 condition_variable
只返回一个结果:
// 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
。它是 class 的基础 __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
。