我正在编写一个用户空间程序,在这个程序中我想在某个时候“阻塞”一个线程。如果我使用互斥类函数,线程就会从处理器中切换出去。我想要的是让线程保持在进程上,而不需要在低功耗状态或循环nop操作中调用上下文开关。在某个时候,另一个线程可以“唤醒”它或者“解除”nop或低功耗状态下的阻塞,并继续执行。我可以使用任何函数或库吗?
发布于 2014-08-20 18:50:49
这是个又好又有效的问题。像您描述的那样的自旋循环可以使用pause指令,以便启用具有更多资源的配对超线程,并启用节能优化。例如。
while(condition) _mm_pause();如果评估条件所消耗的资源比必要的多,则重复pause几次。例如,tbb::互斥使用退避算法,每一次失败的条件检查都会导致在下一次评估之前将pause迭代次数增加一倍。
另见这个博客。
https://stackoverflow.com/questions/25411869
复制相似问题