我试图在我的代码中实现自旋锁,但是我基于维基百科实现的自旋锁导致性能极其低下。有没有简单的方法来提高此自旋锁功能的性能?
int lockValue = 0;
void lock() {
__asm__("loop: \n\t"
"movl $1, %eax \n\t"
"xchg %eax, lockValue \n\t"
"test %eax, %eax \n\t"
"jnz loop");
}
有没有什么办法可以提高这个速度?
谢谢。
我想你想优化错误的事情。如果你有太多的锁争用,你需要重新考虑你的算法,'lock()'之外的代码,看看你如何减少争用。或者你可能想选择旋转锁定几次,然后退出并做一些有用的事情(或睡眠)。 – 2012-08-12 15:07:05