• 締切済み

【C++】boost threadについて

現在visual studio 2010 を使ってC++による開発を行っています。 使用しているライブラリのソースコードを読んでいたら下記のような行を見つけたのですが、 どういった内容なのか検討が付かず、困っています。 ↓部分的で申し訳ないのですが、下記のような関数が使用されていました。   "boost::thread::yield ();"の使用例とかが解れば何がしたいのか解るのではと思っています。 --------------------------------------------------------------------------------- CloudViewer_impl (const std::string& window_name) : window_name_ (window_name), has_cloud_ (false), quit_ (false) { viewer_thread_ = boost::thread (boost::ref (*this)); while (!viewer_) { boost::thread::yield (); } } --------------------------------------------------------------------------------- 参考になるかと思い、std::this_threadのyield関数を調べると下記のように説明されていました。 [yield 関数]   現在のスレッドが通常実行を継続がオペレーティング システムに他のスレッドを実行するように通知します。 boost::thread配下の関数ということで、threadの操作をするモノだということは解るのですが、 これまで、あまりthreadを触って来なかったこともあり、見当がつきません。 不躾な質問で申し訳ありませんが、簡単なサンプルでyieldの使い方、使い処など教えて頂ければ有難いです。

みんなの回答

回答No.1

スレッドには大きく3つの状態があります。 - waiting : 待機中 - ready : 動けるんだけどCPUが空いてないので待機中 - running : 実行中 (最大でもCPUの数だけ) で、yield() は 実行中のスレッド(this_thread)がCPUを明け渡し、 ready なスレッドに実行権を与えます。 これによって忙しいスレッドばかりがCPUを占有するのを回避するです。 yieldとは"譲る" って意味ね。 # yield()したとき、readyなスレッドがなかったときはそのままrunningを維持します。

関連するQ&A

専門家に質問してみよう