这是std :: promise线程的使用安全吗?

Too*_*sie 2 c++ multithreading promise c++11

考虑以下代码:

#include <thread>
#include <iostream>
#include <future>

std::promise<int> prom;

void thr_func(int n)
{
    prom.set_value(n + 10);
}

int main()
{
    std::thread t{thr_func, 5};

    auto fut = prom.get_future();

    int result = fut.get();
    std::cout << result << std::endl;

    t.join();
}
Run Code Online (Sandbox Code Playgroud)

prom同时访问该对象,即使标准说它set_value是原子的,我也找不到任何关于get_future原子(或const)的东西.

因此我想知道这样称呼是否正确get_future.

LWi*_*sey 5

你是对的,标准没有说任何关于get_future原子的东西.同时调用它可能不安全set_value.

而是get_future在创建线程之前调用.这保证了它之前被调用set_value.

auto fut = prom.get_future();

std::thread t{thr_func, 5};

...
Run Code Online (Sandbox Code Playgroud)