thread::yield()の実装

他のスレッドに実行を切り替えるyield()関数ですが、たまたま実装を覗いてみたところ、Boost.ThreadのWindows実装では以下のようになっていました。

// libs/thread/src/win32/thread.cpp

void yield()
{
    Sleep(0);
}

0秒スリープでした。シンプル。


.NET FrameworkSystem.Threading.Thread.Yield()メソッドはbool値でスレッドが切り替えられたかどうかを返すようなので、そういうのが必要な場合はどう実装するんだろうと調べてみたら、そういう場合にはSwitchToThread()関数を使えばいいようです。この関数は、準備ができている他のスレッドに切り替えができたらTRUE、そうでなければFALSEを返します。