spinlock.java
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 41 行
JAVA
41 行
/*
* $Id: SpinLock.java,v 1.1 2004/02/18 06:59:25 epr Exp $
*/
package org.jnode.vm;
/**
* @author Ewout Prangsma (epr@users.sourceforge.net)
*/
public class SpinLock extends VmSystemObject {
/** Lock counter. THIS FIELD MUST BE AT OFFSET 0!! */
private int lockCount;
/**
* Claim access to this monitor. A monitor may only be locked for a small amount of time, since
* this method uses a spinlock.
*
* @see #unlock()
* @see #lockCount
*/
protected final void lock() {
final VmProcessor proc = Unsafe.getCurrentProcessor();
final Address mlAddr = Unsafe.addressOf(this);
while (!Unsafe.atomicCompareAndSwap(mlAddr, 0, 1)) {
proc.yield(true);
}
}
/**
* Release access to this monitor. A monitor may only be locked for a small amount of time,
* since this method uses a spinlock.
*
* @see #lock()
* @see #lockCount
*/
protected final void unlock() {
lockCount = 0;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?