5

したがって、これは非常に簡単に思えます。

#include <iostream>
#include <thread>

void second() {
    cout << "Don't thread on me!" << endl;
}

int main() {
    thread t { second };
    t.join();

    return 0;
    cin.get();
}

含めない場合join()、システムは を呼び出しますabort()。私はこれを理解していません。スレッドはそれ自体で終了すべきではありませんか? スレッドに参加する必要があると、コードを適切にカプセル化するのが難しくなるようです。これはどうしたの?

4

2 に答える 2

4

これは、C++ スレッド ライブラリの設計の一部です。スレッドにする必要はありません。joinスレッドにすることもできますdetach。ただし、デフォルトでdetachスレッドを -ing にすることはお勧めしません。これは、独自の一連の複雑さをもたらすためです。

あなたが言っていることに反して、これがコードをカプセル化するのを難しくするとは思いません。抽象化にはさまざまなレベルがあり、スレッド レベルを選択するということは、スレッドが存在し、それらを処理する必要があることに注意する必要があることを意味します。

さまざまなものに対して、さまざまなレベルの抽象化を選択できます。たとえば、次のようになります。

int main() {
   auto f = std::async([](){ std::cout << "Don't tread on me\n" << std::flush; });
   f.get();      // Wait for the task to complete
}
于 2013-08-29T19:09:36.480 に答える