【发布时间】:2012-08-09 00:34:38
【问题描述】:
我正在尝试在我的代码中实现自旋锁,但我基于 Wikipedia 实现的自旋锁导致性能极慢。
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()之外的代码,看看如何减少所说的争用。或者您可能想选择只旋转几次锁,然后退出并做一些有用的事情(或睡觉)。
标签: c inline-assembly spinlock