別スレッドで重いタスクを動かし、終了後にメインスレッドで値を受け取る。

タイトルにある動作をC++で実装する際、future/promiseを用いた。スレッド終了後、値の受け渡しができる。初めて使用したので、メモ。

std::futureを使うかboost::futureを使うかは、boost::is_ready()を使うかどうかで決める?std::futureのwait_for()でも同じ情報が取れるよう。違いがよく分からなかった。

-----
boost::promise<string> p;
boost::future<string> f = p.get_future();

thread_pool.post([&, ...] {
string r = func();
p.set_value(r);
});
-----
if (f.is_ready()) {
string ret = f.get();
}
-----

condition_variableでも同期やスレッド制御ができる。

[TODO] boost::shared_mutexについて