6

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に実行されるようにする正しい方法は何ですか?

4

1 に答える 1