みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

【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の使い方、使い処など教えて頂ければ有難いです。

投稿日時 - 2014-07-23 00:54:06

QNo.8688832

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

スレッドには大きく3つの状態があります。

- waiting : 待機中
- ready : 動けるんだけどCPUが空いてないので待機中
- running : 実行中 (最大でもCPUの数だけ)

で、yield() は 実行中のスレッド(this_thread)がCPUを明け渡し、
ready なスレッドに実行権を与えます。
これによって忙しいスレッドばかりがCPUを占有するのを回避するです。

yieldとは"譲る" って意味ね。

# yield()したとき、readyなスレッドがなかったときはそのままrunningを維持します。

投稿日時 - 2014-07-23 20:58:03

あなたにオススメの質問