Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source
   * Copyright 2006, Red Hat Middleware LLC, and individual contributors 
   * as indicated by the @author tags. 
   * See the copyright.txt in the distribution for a
   * full listing of individual contributors. 
   * This copyrighted material is made available to anyone wishing to use,
   * modify, copy, or redistribute it subject to the terms and conditions
   * of the GNU Lesser General Public License, v. 2.1.
  * This program is distributed in the hope that it will be useful, but WITHOUT A 
  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
  * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
  * You should have received a copy of the GNU Lesser General Public License,
  * v.2.1 along with this distribution; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
  * MA  02110-1301, USA.
  * 
  * (C) 2005-2006,
  * @author JBoss Inc.
  */
 /*
  * Copyright (C) 2001,
  *
  * Arjuna Solutions Limited,
  * Newcastle upon Tyne,
  * Tyne and Wear,
  * UK.
  *
  * $Id: Mutex.java 2342 2006-03-30 13:06:17Z  $
  */
 
 package com.arjuna.ats.internal.arjuna.common;
 
This is a reentrant Mutex implementation.

Author(s):
Mark Little (mark@arjuna.com)
Version:
$Id: Mutex.java 2342 2006-03-30 13:06:17Z $
Since:
1.0.
 
 
 public class BasicMutex implements Mutex
 {
     public BasicMutex ()
     {
 	//	this(true);
 	this(false);
     }
     
     public BasicMutex (boolean reentrant)
     {
 	 = new Object();
 	 = 0;
 	 = null;
 	 = reentrant;
     }
    
    
Classic mutex operations.
 
     
     public int lock ()
     {
 	if (..isTraceEnabled()) {
         ..trace("Mutex::lock()");
     }
 	
 	synchronized ()
 	{
 	    if ( == 0)
 	    {
 		 = 1;
 		    
 		if ()
 		{
 		     = Thread.currentThread();
 		     = 1;
 		}
 	    }
 	    else
 	    {
 		boolean done = false;
 		    
 		if ()
 		{
 		    if ( == Thread.currentThread())
 		    {
 
 			done = true;
 		    }
 		}
 
 		if (!done)
 		{
		    ++;
		    
		    try
		    {
		    }
		    catch (InterruptedException e)
		    {
		    }
		}
	    }
	}
    }
	    
    public int unlock ()
    {
	if (..isTraceEnabled()) {
        ..trace("Mutex::unlock()");
    }
	synchronized ()
	{
	    if ( <= 0) {
            ..warn_common_Mutex_2();
            return .;
        }
	    else
	    {
		boolean done = false;
		    
		{
		    if ( == Thread.currentThread())
		    {
			if (-- == 0)
			     = null;
			done = true;
		    }
		    else {
                ..warn_common_Mutex_2();
                return .;
            }
		}
		if (!done)
		{
		    if (-- >= 0)
		    {
		    }
		}
	    }
	}
    }
    
    public int tryLock ()
    {
	if (..isTraceEnabled()) {
        ..trace("Mutex::tryLock()");
    }
	synchronized ()
	{
	    if ( == 0)
		return lock();
	    else
	    {
		{
		    if ( == Thread.currentThread())
			return lock();
		}
	    }
	}
    }
    private Object  _lock;
    private int     _users;
    private Thread  _owner;
    private boolean _reentrant;
    private int     _recursiveCalls;
    
New to GrepCode? Check out our FAQ X