You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2016/01/11 16:34:49 UTC
[16/16] ignite git commit: Fixed distance between stripes.
Fixed distance between stripes.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/17b3a9f6
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/17b3a9f6
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/17b3a9f6
Branch: refs/heads/ignite-2316
Commit: 17b3a9f691a6907c5ffbfbce2e3bd58ca8f4d0a9
Parents: 13b4d37
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Mon Jan 11 18:35:35 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Mon Jan 11 18:35:35 2016 +0300
----------------------------------------------------------------------
.../internal/util/GridStripedSpinBusyLock.java | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/17b3a9f6/modules/core/src/main/java/org/apache/ignite/internal/util/GridStripedSpinBusyLock.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridStripedSpinBusyLock.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridStripedSpinBusyLock.java
index 064e044..f665bd8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridStripedSpinBusyLock.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridStripedSpinBusyLock.java
@@ -67,7 +67,7 @@ public class GridStripedSpinBusyLock {
this.stripeCnt = stripeCnt;
// Each state must be located 64 bytes from the other to avoid false sharing.
- states = new AtomicIntegerArray(stripeCnt * 16);
+ states = new AtomicIntegerArray(adjusted(stripeCnt));
}
/**
@@ -100,7 +100,7 @@ public class GridStripedSpinBusyLock {
public void block() {
// 1. CAS-loop to set a writer bit.
for (int i = 0; i < stripeCnt; i++) {
- int idx = i << 2;
+ int idx = adjusted(i);
while (true) {
int oldVal = states.get(idx);
@@ -114,7 +114,7 @@ public class GridStripedSpinBusyLock {
boolean interrupt = false;
for (int i = 0; i < stripeCnt; i++) {
- int idx = i << 2;
+ int idx = adjusted(i);
while (states.get(idx) != WRITER_MASK) {
try {
@@ -136,6 +136,16 @@ public class GridStripedSpinBusyLock {
* @return Index for the given thread.
*/
private int index() {
- return (THREAD_IDX.get() % stripeCnt) << 2;
+ return adjusted(THREAD_IDX.get() % stripeCnt);
+ }
+
+ /**
+ * Gets value adjusted for striping.
+ *
+ * @param val Value.
+ * @return Value.
+ */
+ private static int adjusted(int val) {
+ return val << 4;
}
}