同僚と私は、スピンロック ミューテックスをstd::atomic_flag
で実装したいが、そのスピンロックを while(true) ではなく
while(true)
{
cnt=0;
while (cnt<yieldAfterTries)
{
//try to get lock
cnt++;
}
std::this_thread::yield();
// if got lock do work and then break;
}
基本的なアイデアは、スレッドがリアルタイムの優先度を持っていても、しばらくすると生成されるため、「非常に長い間」他のスレッドをブロックできないということです...しかし、 std::yield の仕様を見たとき、それは提案であり、強制的なものではありません。
スレッドの実行を再スケジュールするためのヒントを実装に提供し、他のスレッドを実行できるようにします。
http://en.cppreference.com/w/cpp/thread/yield
それで、それは問題になる可能性がありますか?