Ubuntu で GCC 4.8.2 をstd::async()
返す関数をテストするために、次のコードを作成しました。void
#include <future>
#include <iostream>
void functionTBC()
{
std::cerr << "Print here\n";
}
int main(void)
{
#ifdef USE_ASYNC
auto i = std::async(std::launch::async, functionTBC);
#else
auto i = std::async(std::launch::deferred, functionTBC);
#endif
//i.get();
return 0;
}
がコメント解除されている場合i.get();
、メッセージ"Print here"
は常に存在します。ただし、i.get();
がコメント アウトされている場合は、 が定義されて"Print here"
いる場合にのみ存在しますUSE_ASYNC
(つまり、std::launch::async
常にメッセージが表示されますが、表示されstd::launch::deferred
ません)。
これは保証された動作ですか?非同期呼び出しが確実void
に実行されるようにする正しい方法は何ですか?