Microsoft 固有の C++ コードを書いているときに、スピンロックよりも書き込みSleep(1)
の方がはるかに優れていると言われました。これは、より多くの CPU 時間を使用し、さらに実行を待機している同じ優先度のスレッドがある場合にのみ生成されるためです。Sleep(0)
Sleep(0)
std::this_thread::yield()
ただし、C++11 スレッド ライブラリでは、 vsの効果に関するドキュメントはあまりありません (少なくとも私が見つけることができたものは) std::this_thread::sleep_for( std::chrono::milliseconds(1) )
。2 番目は確かにより詳細ですが、どちらもスピンロックに対して同等に効率的ですか、それともSleep(0)
vs.Sleep(1)
std::this_thread::yield()
または のいずれかstd::this_thread::sleep_for( std::chrono::milliseconds(1) )
が受け入れられるループの例:
void SpinLock( const bool& bSomeCondition )
{
// Wait for some condition to be satisfied
while( !bSomeCondition )
{
/*Either std::this_thread::yield() or
std::this_thread::sleep_for( std::chrono::milliseconds(1) )
is acceptable here.*/
}
// Do something!
}