我和同事讨论了一个假设的问题,当一个人想要用 实现自旋锁互斥锁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
那会不会有问题?