8

C/C++ のスレッドに関する質問...

C++0x 構文

#include <thread>

void dummy() {}

int main(int, char*[]) {
   std::thread x(dummy);
   std::thread y(dummy);
   ...
   return 0;
}

スレッドはいくつありますか? 2 つ (x と y) または 3 つ (x、y とメイン)? this_thread::yield()メインで呼んでもいいですか?this_thread::get_id()そして、メインで呼び出すと何が得られますか?

pthread 構文

#include <pthread.h>

void dummy() {}

int main(int, char*[]) {
   pthread_t x, y;
   pthread_create(&x, NULL, &dummy, NULL);
   pthread_create(&y, NULL, &dummy, NULL);
   ...
   return 0;
}

スレッドはいくつありますか? 2 つ (x と y) または 3 つ (x、y とメイン)? pthread_yield()メインで呼んでもいいですか?pthread_self()そして、メインで呼び出すと何が得られますか?

ブースト構文

#include <boost/thread>

void dummy() {}

int main(int, char*[]) {
   boost::thread x(dummy);
   boost::thread y(dummy);
   ...
   return 0;
}

スレッドはいくつありますか? 2 つ (x と y) または 3 つ (x、y とメイン)? boost::this_thread::yield()メインで呼んでもいいですか?boost::this_thread::get_id()そして、メインで呼び出すと何が得られますか?

4

3 に答える 3

25

いずれの場合も、2 つの追加スレッドを作成したため、3 つ (x、y、およびメイン) になります。メインの呼び出しを含む各スレッドで異なる ID を取得します。

于 2009-08-19T15:38:09.347 に答える
0

上記の 3 つの実装はすべて同じ結果になります。std::thread は「pthread」の上に実装されているため、すべてで 3 つのスレッドが作成されます。Main が親スレッドになり、他のスレッドは子スレッドになり、各スレッドが作成され、boost::thread が std::thread と同じ作成者によって作成されますが、いくつかの拡張機能が追加されると、異なる ID になります。

于 2014-06-17T09:29:40.960 に答える