2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
20 namespace Mono.Lucene.Net.Store
23 /// <summary> Implements {@link LockFactory} for a single in-process instance,
24 /// meaning all locking will take place through this one instance.
25 /// Only use this {@link LockFactory} when you are certain all
26 /// IndexReaders and IndexWriters for a given index are running
27 /// against a single shared in-process Directory instance. This is
28 /// currently the default locking for RAMDirectory.
31 /// <seealso cref="LockFactory">
34 public class SingleInstanceLockFactory:LockFactory
37 private System.Collections.Hashtable locks = new System.Collections.Hashtable();
39 public override Lock MakeLock(System.String lockName)
41 // We do not use the LockPrefix at all, because the private
42 // HashSet instance effectively scopes the locking to this
43 // single Directory instance.
44 return new SingleInstanceLock(locks, lockName);
47 public override void ClearLock(System.String lockName)
51 if (locks.Contains(lockName))
53 locks.Remove(lockName);
60 class SingleInstanceLock:Lock
63 internal System.String lockName;
64 private System.Collections.Hashtable locks;
66 public SingleInstanceLock(System.Collections.Hashtable locks, System.String lockName)
69 this.lockName = lockName;
72 public override bool Obtain()
76 if (locks.Contains(lockName) == false)
78 locks.Add(lockName, lockName);
86 public override void Release()
90 locks.Remove(lockName);
94 public override bool IsLocked()
98 return locks.Contains(lockName);
102 public override System.String ToString()
104 return base.ToString() + ": " + lockName;