|
本帖最后由 LLJ 于 2020-9-12 06:12 编辑
自旋锁是为实现保护共享资源而提出一种锁机制。它的设计初衷是:在短期间内进行轻量级的锁定。
自旋锁的效率远高于互斥锁、信号量。但自旋锁不会引起调用者睡眠。如果自旋锁已经被获得锁,调用者就一直循环在那里检查是否已经释放锁,"自旋"一词就是因此而得名。
自旋锁其实是忙着争用,它不应该被持有时间过长。
自旋锁只需要用一个整数变量来表示,1锁定,0解锁。
代码:
. . . . 置入代码 ({ 139, 85, 8, 131, 58, 0, 117, 251, 185, 1, 0, 0, 0, 49, 192, 240, 15, 177, 10, 133, 192, 117, 236 })置入代码 ({ 139, 69, 8, 199, 0, 0, 0, 0, 0 })
上面被屏蔽的代码,换成了汇编,这是因为易语言不会内联编译InterlockedCompareExchange(),以及调用API是动态加载DLL,这不符合自旋锁的初衷,所以用汇编提高执行效率。
附上易代码是为了更容易理解原理,但不要用。
释放自旋锁很简单,直接写0就是解锁。
|
|