在windows x64下想实现cpu_relax,但是发现vs不支持64位下的内联汇编,找了一下解决方案,基本都是要外部编译asm,然后再统一link,感觉过于复杂,于是看windows nt库是否有这样的支持,发现有两个头文件有类似实现:
一个是intel库提供的#include emmintrin.h中的_mm_pause实现,另外一个是winnt.h中的_mm_pause实现,推荐使用winnt.h中的_mm_pause,但是问题是这些函数都是内部函数,不是非常推荐使用,它直接跟架构绑定,如果你的cpu_relax实现代码后面在其它架构下编译,是否又要去调整?在翻看winnt.h的过程中,发现有YieldProcessor的macro实现,于是查看文档说明,确认这个才是推荐使用的cpu_relax做法,内部会根据架构差异决定怎么去实现relax,对于不支持relax的平台,为一个空macro定义。