ignite-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From voze...@apache.org
Subject ignite git commit: Improved RW lock.
Date Thu, 03 Mar 2016 11:48:42 GMT
Repository: ignite
Updated Branches:
  refs/heads/bench-atomic-good-lock [created] 5b1e30451


Improved RW lock.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/5b1e3045
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/5b1e3045
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/5b1e3045

Branch: refs/heads/bench-atomic-good-lock
Commit: 5b1e30451bb1b4abac0a40907776be8abf61f2b8
Parents: c13339f
Author: vozerov-gridgain <vozerov@gridgain.com>
Authored: Thu Mar 3 14:48:33 2016 +0300
Committer: vozerov-gridgain <vozerov@gridgain.com>
Committed: Thu Mar 3 14:48:33 2016 +0300

----------------------------------------------------------------------
 .../util/StripedCompositeReadWriteLock.java     | 14 ++++++--
 .../org/apache/ignite/thread/IgniteThread.java  | 34 ++++++++++++++++++--
 .../ignite/thread/IgniteThreadFactory.java      |  7 +++-
 3 files changed, 49 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/5b1e3045/modules/core/src/main/java/org/apache/ignite/internal/util/StripedCompositeReadWriteLock.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/StripedCompositeReadWriteLock.java
b/modules/core/src/main/java/org/apache/ignite/internal/util/StripedCompositeReadWriteLock.java
index e28a5f8..96445d8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/StripedCompositeReadWriteLock.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/StripedCompositeReadWriteLock.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.util;
 
+import org.apache.ignite.thread.IgniteThread;
 import org.jetbrains.annotations.NotNull;
 
 import java.util.concurrent.TimeUnit;
@@ -65,9 +66,18 @@ public class StripedCompositeReadWriteLock implements ReadWriteLock {
 
     /** {@inheritDoc} */
     @NotNull @Override public Lock readLock() {
-        int idx = IDX.get() % locks.length;
+        int idx;
 
-        return locks[idx].readLock();
+        if (Thread.currentThread() instanceof IgniteThread) {
+            idx = ((IgniteThread)Thread.currentThread()).groupIndex();
+
+            if (idx == IgniteThread.GRP_IDX_UNASSIGNED)
+                idx = IDX.get();
+        }
+        else
+            idx = IDX.get();
+
+        return locks[idx % locks.length].readLock();
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/5b1e3045/modules/core/src/main/java/org/apache/ignite/thread/IgniteThread.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/thread/IgniteThread.java b/modules/core/src/main/java/org/apache/ignite/thread/IgniteThread.java
index a9f1fbb..03ed589 100644
--- a/modules/core/src/main/java/org/apache/ignite/thread/IgniteThread.java
+++ b/modules/core/src/main/java/org/apache/ignite/thread/IgniteThread.java
@@ -33,6 +33,9 @@ import org.apache.ignite.internal.util.worker.GridWorker;
  * <b>Note</b>: this class is intended for internal use only.
  */
 public class IgniteThread extends Thread {
+    /** Index for unassigned thread. */
+    public static final int GRP_IDX_UNASSIGNED = -1;
+
     /** Default thread's group. */
     private static final ThreadGroup DFLT_GRP = new ThreadGroup("ignite");
 
@@ -42,13 +45,16 @@ public class IgniteThread extends Thread {
     /** The name of the grid this thread belongs to. */
     protected final String gridName;
 
+    /** Group index. */
+    private final int grpIdx;
+
     /**
      * Creates thread with given worker.
      *
      * @param worker Runnable to create thread with.
      */
     public IgniteThread(GridWorker worker) {
-        this(DFLT_GRP, worker.gridName(), worker.name(), worker);
+        this(DFLT_GRP, worker.gridName(), worker.name(), worker, GRP_IDX_UNASSIGNED);
     }
 
     /**
@@ -59,7 +65,19 @@ public class IgniteThread extends Thread {
      * @param r Runnable to execute.
      */
     public IgniteThread(String gridName, String threadName, Runnable r) {
-        this(DFLT_GRP, gridName, threadName, r);
+        this(gridName, threadName, r, GRP_IDX_UNASSIGNED);
+    }
+
+    /**
+     * Creates grid thread with given name for a given grid.
+     *
+     * @param gridName Name of grid this thread is created for.
+     * @param threadName Name of thread.
+     * @param r Runnable to execute.
+     * @param grpIdx Index within a group.
+     */
+    public IgniteThread(String gridName, String threadName, Runnable r, int grpIdx) {
+        this(DFLT_GRP, gridName, threadName, r, grpIdx);
     }
 
     /**
@@ -70,11 +88,13 @@ public class IgniteThread extends Thread {
      * @param gridName Name of grid this thread is created for.
      * @param threadName Name of thread.
      * @param r Runnable to execute.
+     * @param grpIdx Thread index within a group.
      */
-    public IgniteThread(ThreadGroup grp, String gridName, String threadName, Runnable r)
{
+    public IgniteThread(ThreadGroup grp, String gridName, String threadName, Runnable r,
int grpIdx) {
         super(grp, r, createName(cntr.incrementAndGet(), threadName, gridName));
 
         this.gridName = gridName;
+        this.grpIdx = grpIdx;
     }
 
     /**
@@ -86,6 +106,7 @@ public class IgniteThread extends Thread {
         super(threadGrp, threadName);
 
         this.gridName = gridName;
+        this.grpIdx = GRP_IDX_UNASSIGNED;
     }
 
     /**
@@ -98,6 +119,13 @@ public class IgniteThread extends Thread {
     }
 
     /**
+     * @return Group index.
+     */
+    public int groupIndex() {
+        return grpIdx;
+    }
+
+    /**
      * Creates new thread name.
      *
      * @param num Thread number.

http://git-wip-us.apache.org/repos/asf/ignite/blob/5b1e3045/modules/core/src/main/java/org/apache/ignite/thread/IgniteThreadFactory.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/thread/IgniteThreadFactory.java
b/modules/core/src/main/java/org/apache/ignite/thread/IgniteThreadFactory.java
index cd0a9cc..55557dd 100644
--- a/modules/core/src/main/java/org/apache/ignite/thread/IgniteThreadFactory.java
+++ b/modules/core/src/main/java/org/apache/ignite/thread/IgniteThreadFactory.java
@@ -18,6 +18,8 @@
 package org.apache.ignite.thread;
 
 import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.atomic.AtomicInteger;
+
 import org.jetbrains.annotations.NotNull;
 
 /**
@@ -31,6 +33,9 @@ public class IgniteThreadFactory implements ThreadFactory {
     /** Thread name. */
     private final String threadName;
 
+    /** Index generator for threads. */
+    private final AtomicInteger idxGen = new AtomicInteger();
+
     /**
      * Constructs new thread factory for given grid. All threads will belong
      * to the same default thread group.
@@ -55,6 +60,6 @@ public class IgniteThreadFactory implements ThreadFactory {
 
     /** {@inheritDoc} */
     @Override public Thread newThread(@NotNull Runnable r) {
-        return new IgniteThread(gridName, threadName, r);
+        return new IgniteThread(gridName, threadName, r, idxGen.incrementAndGet());
     }
 }
\ No newline at end of file


Mime
View raw message