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 + -
显示快捷键?