プロが教えるわが家の防犯対策術!

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

A 回答 (1件)

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



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

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

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

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!