如果我执行以下操作:
std::promise<void> p;
int a = 1;
std::thread t([&] {
a = 2;
p.set_value();
});
p.get_future().wait();
// Is the value of `a` guaranteed to be 2 here?
参考参数有这个要说的set_value()
,但我不确定这意味着什么:
调用此函数不会与调用 get_future 引入数据竞争(但它们不需要彼此同步)。
Do set_value()
and wait()
提供获取/释放同步(或其他形式)?
从我的阅读中我相信a
最后保证为2。请注意有关信息承诺本身(强调我的):
Promise 是 Promise-Future 通信通道的“推送”端:在共享状态中存储值的操作与等待共享状态的任何函数(例如 std::future::get)的成功返回同步(如 std::memory_order 中所定义)。否则,对同一共享状态的并发访问可能会发生冲突:例如 std::shared_future::get 的多个调用者必须全部是只读的或提供外部同步。
当然,我鼓励您阅读某些东西同步的含义。对于这种情况意味着set_value
被视为线程间发生之前,因此从我所写的内容来看a
是一个明显的副作用。你可以找到更多here.
你的报价是什么意思get_future
?这意味着您可以安全地致电get_future
and set_value
来自不同的线程,它不会破坏任何东西。但它本身也不一定引入任何内存栅栏。唯一确定且安全的同步点是set_value
from std::promise
and get
from std::future
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)