From 6f14a15b4466cb1424f7a7ca7c8cb48b349ee2d4 Mon Sep 17 00:00:00 2001 From: cotton-ben Date: Tue, 14 Jul 2020 11:30:12 -0400 Subject: [PATCH] built in (0,1) second pause to deter racing readers (seeking a tryReadLock() stamp) from incrementing {readerCount} cardinality incoherently. using LongValue.addAtomicReaderCount(+1); as per Chronicle-Algorithms --- cp.txt | 2 +- cp2.txt | 2 +- .../revelations/ChronicleStampedLock.java | 131 ++++++++++-------- 3 files changed, 79 insertions(+), 56 deletions(-) diff --git a/cp.txt b/cp.txt index 84c744de3..14bc72482 100644 --- a/cp.txt +++ b/cp.txt @@ -1 +1 @@ -C:\Users\buddy\.m2\repository\com\intellij\annotations\12.0\annotations-12.0.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-core\2.19.71\chronicle-core-2.19.71.jar;C:\Users\buddy\.m2\repository\org\jetbrains\annotations\19.0.0\annotations-19.0.0.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-values\2.19.42\chronicle-values-2.19.42.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-bytes\2.19.71\chronicle-bytes-2.19.71.jar;C:\Users\buddy\.m2\repository\com\squareup\javapoet\1.12.1\javapoet-1.12.1.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-threads\2.19.70\chronicle-threads-2.19.70.jar;C:\Users\buddy\.m2\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-wire\2.19.72\chronicle-wire-2.19.72.jar;C:\Users\buddy\.m2\repository\net\openhft\compiler\2.3.6\compiler-2.3.6.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-algorithms\2.19.42\chronicle-algorithms-2.19.42.jar;C:\Users\buddy\.m2\repository\net\java\dev\jna\jna\5.5.0\jna-5.5.0.jar;C:\Users\buddy\.m2\repository\net\java\dev\jna\jna-platform\5.5.0\jna-platform-5.5.0.jar;C:\Users\buddy\.m2\repository\com\thoughtworks\xstream\xstream\1.4.12\xstream-1.4.12.jar;C:\Users\buddy\.m2\repository\xmlpull\xmlpull\1.1.3.1\xmlpull-1.1.3.1.jar;C:\Users\buddy\.m2\repository\xpp3\xpp3_min\1.1.4c\xpp3_min-1.1.4c.jar;C:\Users\buddy\.m2\repository\org\codehaus\jettison\jettison\1.4.1\jettison-1.4.1.jar;C:\Users\buddy\.m2\repository\org\ops4j\pax\url\pax-url-aether\2.6.2\pax-url-aether-2.6.2.jar;C:\Users\buddy\.m2\repository\org\ops4j\pax\url\pax-url-aether-support\2.6.2\pax-url-aether-support-2.6.2.jar;C:\Users\buddy\.m2\repository\org\apache\maven\resolver\maven-resolver-impl\1.3.1\maven-resolver-impl-1.3.1.jar;C:\Users\buddy\.m2\repository\org\apache\maven\resolver\maven-resolver-api\1.3.1\maven-resolver-api-1.3.1.jar;C:\Users\buddy\.m2\repository\org\apache\maven\resolver\maven-resolver-spi\1.3.1\maven-resolver-spi-1.3.1.jar;C:\Users\buddy\.m2\repository\org\apache\maven\resolver\maven-resolver-util\1.3.1\maven-resolver-util-1.3.1.jar;C:\Users\buddy\.m2\repository\org\slf4j\jcl-over-slf4j\1.6.6\jcl-over-slf4j-1.6.6.jar;C:\Users\buddy\.m2\repository\net\openhft\jlbh\1.19.30\jlbh-1.19.30.jar;C:\Users\buddy\.m2\repository\junit\junit\4.13\junit-4.13.jar;C:\Users\buddy\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\buddy\.m2\repository\org\slf4j\slf4j-simple\1.7.30\slf4j-simple-1.7.30.jar;C:\Users\buddy\.m2\repository\org\mockito\mockito-core\3.3.3\mockito-core-3.3.3.jar;C:\Users\buddy\.m2\repository\net\bytebuddy\byte-buddy\1.10.5\byte-buddy-1.10.5.jar;C:\Users\buddy\.m2\repository\net\bytebuddy\byte-buddy-agent\1.10.5\byte-buddy-agent-1.10.5.jar;C:\Users\buddy\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-module-junit4\2.0.7\powermock-module-junit4-2.0.7.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-module-junit4-common\2.0.7\powermock-module-junit4-common-2.0.7.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-reflect\2.0.7\powermock-reflect-2.0.7.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-core\2.0.7\powermock-core-2.0.7.jar;C:\Users\buddy\.m2\repository\org\javassist\javassist\3.27.0-GA\javassist-3.27.0-GA.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-api-mockito\1.7.4\powermock-api-mockito-1.7.4.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-api-mockito-common\1.7.4\powermock-api-mockito-common-1.7.4.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-api-support\1.7.4\powermock-api-support-1.7.4.jar;C:\Users\buddy\.m2\repository\net\openhft\affinity\3.2.3\affinity-3.2.3.jar;C:\Users\buddy\.m2\repository\com\google\guava\guava-testlib\19.0\guava-testlib-19.0.jar;C:\Users\buddy\.m2\repository\com\google\code\findbugs\jsr305\1.3.9\jsr305-1.3.9.jar;C:\Users\buddy\.m2\repository\com\google\errorprone\error_prone_annotations\2.0.2\error_prone_annotations-2.0.2.jar;C:\Users\buddy\.m2\repository\com\google\guava\guava\19.0\guava-19.0.jar;C:\Users\buddy\.m2\repository\net\openhft\zero-allocation-hashing\0.8\zero-allocation-hashing-0.8.jar;C:\Users\buddy\.m2\repository\com\samskivert\samskivert\1.9\samskivert-1.9.jar;C:\Users\buddy\.m2\repository\org\apache\commons\commons-lang3\3.10\commons-lang3-3.10.jar;C:\Users\buddy\.m2\repository\io\hawt\hawtio-embedded\2.7.1\hawtio-embedded-2.7.1.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-webapp\9.4.6.v20170531\jetty-webapp-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-xml\9.4.6.v20170531\jetty-xml-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-util\9.4.6.v20170531\jetty-util-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-servlet\9.4.6.v20170531\jetty-servlet-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-security\9.4.6.v20170531\jetty-security-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-server\9.4.6.v20170531\jetty-server-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\javax\servlet\javax.servlet-api\3.1.0\javax.servlet-api-3.1.0.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-http\9.4.6.v20170531\jetty-http-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-io\9.4.6.v20170531\jetty-io-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\buddy\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\buddy\.m2\repository\net\openhft\stage-compiler\1.11\stage-compiler-1.11.jar;C:\Users\buddy\.m2\repository\net\openhft\spoon-core\4.4.1\spoon-core-4.4.1.jar;C:\Users\buddy\.m2\repository\org\eclipse\jdt\core\compiler\ecj\4.4.2\ecj-4.4.2.jar;C:\Users\buddy\.m2\repository\com\martiansoftware\jsap\2.1\jsap-2.1.jar;C:\Users\buddy\.m2\repository\log4j\log4j\1.2.17\log4j-1.2.17.jar;C:\Users\buddy\.m2\repository\commons-io\commons-io\1.3.2\commons-io-1.3.2.jar;C:\Users\buddy\.m2\repository\it\unimi\dsi\fastutil\7.0.6\fastutil-7.0.6.jar;C:\Users\buddy\.m2\repository\org\junit\jupiter\junit-jupiter\5.7.0-M1\junit-jupiter-5.7.0-M1.jar;C:\Users\buddy\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.7.0-M1\junit-jupiter-api-5.7.0-M1.jar;C:\Users\buddy\.m2\repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;C:\Users\buddy\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\buddy\.m2\repository\org\junit\platform\junit-platform-commons\1.7.0-M1\junit-platform-commons-1.7.0-M1.jar;C:\Users\buddy\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.7.0-M1\junit-jupiter-params-5.7.0-M1.jar;C:\Users\buddy\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.7.0-M1\junit-jupiter-engine-5.7.0-M1.jar;C:\Users\buddy\.m2\repository\org\junit\platform\junit-platform-engine\1.7.0-M1\junit-platform-engine-1.7.0-M1.jar;C:\Java\jre\..\lib\tools.jar \ No newline at end of file +C:\Users\buddy\.m2\repository\com\intellij\annotations\12.0\annotations-12.0.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-core\2.19.72-SNAPSHOT\chronicle-core-2.19.72-SNAPSHOT.jar;C:\Users\buddy\.m2\repository\org\jetbrains\annotations\19.0.0\annotations-19.0.0.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-values\2.19.42\chronicle-values-2.19.42.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-bytes\2.19.72-SNAPSHOT\chronicle-bytes-2.19.72-SNAPSHOT.jar;C:\Users\buddy\.m2\repository\com\squareup\javapoet\1.12.1\javapoet-1.12.1.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-threads\2.19.70\chronicle-threads-2.19.70.jar;C:\Users\buddy\.m2\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-wire\2.19.74-SNAPSHOT\chronicle-wire-2.19.74-SNAPSHOT.jar;C:\Users\buddy\.m2\repository\net\openhft\compiler\2.3.6\compiler-2.3.6.jar;C:\Users\buddy\.m2\repository\net\openhft\chronicle-algorithms\2.19.42\chronicle-algorithms-2.19.42.jar;C:\Users\buddy\.m2\repository\net\java\dev\jna\jna\5.5.0\jna-5.5.0.jar;C:\Users\buddy\.m2\repository\net\java\dev\jna\jna-platform\5.5.0\jna-platform-5.5.0.jar;C:\Users\buddy\.m2\repository\com\thoughtworks\xstream\xstream\1.4.12\xstream-1.4.12.jar;C:\Users\buddy\.m2\repository\xmlpull\xmlpull\1.1.3.1\xmlpull-1.1.3.1.jar;C:\Users\buddy\.m2\repository\xpp3\xpp3_min\1.1.4c\xpp3_min-1.1.4c.jar;C:\Users\buddy\.m2\repository\org\codehaus\jettison\jettison\1.4.1\jettison-1.4.1.jar;C:\Users\buddy\.m2\repository\org\ops4j\pax\url\pax-url-aether\2.6.2\pax-url-aether-2.6.2.jar;C:\Users\buddy\.m2\repository\org\ops4j\pax\url\pax-url-aether-support\2.6.2\pax-url-aether-support-2.6.2.jar;C:\Users\buddy\.m2\repository\org\apache\maven\resolver\maven-resolver-impl\1.3.1\maven-resolver-impl-1.3.1.jar;C:\Users\buddy\.m2\repository\org\apache\maven\resolver\maven-resolver-api\1.3.1\maven-resolver-api-1.3.1.jar;C:\Users\buddy\.m2\repository\org\apache\maven\resolver\maven-resolver-spi\1.3.1\maven-resolver-spi-1.3.1.jar;C:\Users\buddy\.m2\repository\org\apache\maven\resolver\maven-resolver-util\1.3.1\maven-resolver-util-1.3.1.jar;C:\Users\buddy\.m2\repository\org\slf4j\jcl-over-slf4j\1.6.6\jcl-over-slf4j-1.6.6.jar;C:\Users\buddy\.m2\repository\net\openhft\jlbh\1.19.30\jlbh-1.19.30.jar;C:\Users\buddy\.m2\repository\junit\junit\4.13\junit-4.13.jar;C:\Users\buddy\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\buddy\.m2\repository\org\slf4j\slf4j-simple\1.7.30\slf4j-simple-1.7.30.jar;C:\Users\buddy\.m2\repository\org\mockito\mockito-core\3.3.3\mockito-core-3.3.3.jar;C:\Users\buddy\.m2\repository\net\bytebuddy\byte-buddy\1.10.5\byte-buddy-1.10.5.jar;C:\Users\buddy\.m2\repository\net\bytebuddy\byte-buddy-agent\1.10.5\byte-buddy-agent-1.10.5.jar;C:\Users\buddy\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-module-junit4\2.0.7\powermock-module-junit4-2.0.7.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-module-junit4-common\2.0.7\powermock-module-junit4-common-2.0.7.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-reflect\2.0.7\powermock-reflect-2.0.7.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-core\2.0.7\powermock-core-2.0.7.jar;C:\Users\buddy\.m2\repository\org\javassist\javassist\3.27.0-GA\javassist-3.27.0-GA.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-api-mockito\1.7.4\powermock-api-mockito-1.7.4.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-api-mockito-common\1.7.4\powermock-api-mockito-common-1.7.4.jar;C:\Users\buddy\.m2\repository\org\powermock\powermock-api-support\1.7.4\powermock-api-support-1.7.4.jar;C:\Users\buddy\.m2\repository\net\openhft\affinity\3.2.4-SNAPSHOT\affinity-3.2.4-SNAPSHOT.jar;C:\Users\buddy\.m2\repository\com\google\guava\guava-testlib\19.0\guava-testlib-19.0.jar;C:\Users\buddy\.m2\repository\com\google\code\findbugs\jsr305\1.3.9\jsr305-1.3.9.jar;C:\Users\buddy\.m2\repository\com\google\errorprone\error_prone_annotations\2.0.2\error_prone_annotations-2.0.2.jar;C:\Users\buddy\.m2\repository\com\google\guava\guava\19.0\guava-19.0.jar;C:\Users\buddy\.m2\repository\net\openhft\zero-allocation-hashing\0.8\zero-allocation-hashing-0.8.jar;C:\Users\buddy\.m2\repository\com\samskivert\samskivert\1.9\samskivert-1.9.jar;C:\Users\buddy\.m2\repository\org\apache\commons\commons-lang3\3.10\commons-lang3-3.10.jar;C:\Users\buddy\.m2\repository\io\hawt\hawtio-embedded\2.7.1\hawtio-embedded-2.7.1.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-webapp\9.4.6.v20170531\jetty-webapp-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-xml\9.4.6.v20170531\jetty-xml-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-util\9.4.6.v20170531\jetty-util-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-servlet\9.4.6.v20170531\jetty-servlet-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-security\9.4.6.v20170531\jetty-security-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-server\9.4.6.v20170531\jetty-server-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\javax\servlet\javax.servlet-api\3.1.0\javax.servlet-api-3.1.0.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-http\9.4.6.v20170531\jetty-http-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\eclipse\jetty\jetty-io\9.4.6.v20170531\jetty-io-9.4.6.v20170531.jar;C:\Users\buddy\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\buddy\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\buddy\.m2\repository\net\openhft\stage-compiler\1.11\stage-compiler-1.11.jar;C:\Users\buddy\.m2\repository\net\openhft\spoon-core\4.4.1\spoon-core-4.4.1.jar;C:\Users\buddy\.m2\repository\org\eclipse\jdt\core\compiler\ecj\4.4.2\ecj-4.4.2.jar;C:\Users\buddy\.m2\repository\com\martiansoftware\jsap\2.1\jsap-2.1.jar;C:\Users\buddy\.m2\repository\log4j\log4j\1.2.17\log4j-1.2.17.jar;C:\Users\buddy\.m2\repository\commons-io\commons-io\1.3.2\commons-io-1.3.2.jar;C:\Users\buddy\.m2\repository\it\unimi\dsi\fastutil\7.0.6\fastutil-7.0.6.jar;C:\Users\buddy\.m2\repository\org\junit\jupiter\junit-jupiter\5.7.0-M1\junit-jupiter-5.7.0-M1.jar;C:\Users\buddy\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.7.0-M1\junit-jupiter-api-5.7.0-M1.jar;C:\Users\buddy\.m2\repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;C:\Users\buddy\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\buddy\.m2\repository\org\junit\platform\junit-platform-commons\1.7.0-M1\junit-platform-commons-1.7.0-M1.jar;C:\Users\buddy\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.7.0-M1\junit-jupiter-params-5.7.0-M1.jar;C:\Users\buddy\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.7.0-M1\junit-jupiter-engine-5.7.0-M1.jar;C:\Users\buddy\.m2\repository\org\junit\platform\junit-platform-engine\1.7.0-M1\junit-platform-engine-1.7.0-M1.jar;C:\Java\jre\..\lib\tools.jar \ No newline at end of file diff --git a/cp2.txt b/cp2.txt index 7e0b211ad..b8b0ddf47 100644 --- a/cp2.txt +++ b/cp2.txt @@ -1 +1 @@ -/C//Users/buddy/.m2/repository/com/intellij/annotations/12.0/annotations-12.0.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-core/2.19.71/chronicle-core-2.19.71.jar:/C//Users/buddy/.m2/repository/org/jetbrains/annotations/19.0.0/annotations-19.0.0.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-values/2.19.42/chronicle-values-2.19.42.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-bytes/2.19.71/chronicle-bytes-2.19.71.jar:/C//Users/buddy/.m2/repository/com/squareup/javapoet/1.12.1/javapoet-1.12.1.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-threads/2.19.70/chronicle-threads-2.19.70.jar:/C//Users/buddy/.m2/repository/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-wire/2.19.72/chronicle-wire-2.19.72.jar:/C//Users/buddy/.m2/repository/net/openhft/compiler/2.3.6/compiler-2.3.6.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-algorithms/2.19.42/chronicle-algorithms-2.19.42.jar:/C//Users/buddy/.m2/repository/net/java/dev/jna/jna/5.5.0/jna-5.5.0.jar:/C//Users/buddy/.m2/repository/net/java/dev/jna/jna-platform/5.5.0/jna-platform-5.5.0.jar:/C//Users/buddy/.m2/repository/com/thoughtworks/xstream/xstream/1.4.12/xstream-1.4.12.jar:/C//Users/buddy/.m2/repository/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1.jar:/C//Users/buddy/.m2/repository/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar:/C//Users/buddy/.m2/repository/org/codehaus/jettison/jettison/1.4.1/jettison-1.4.1.jar:/C//Users/buddy/.m2/repository/org/ops4j/pax/url/pax-url-aether/2.6.2/pax-url-aether-2.6.2.jar:/C//Users/buddy/.m2/repository/org/ops4j/pax/url/pax-url-aether-support/2.6.2/pax-url-aether-support-2.6.2.jar:/C//Users/buddy/.m2/repository/org/apache/maven/resolver/maven-resolver-impl/1.3.1/maven-resolver-impl-1.3.1.jar:/C//Users/buddy/.m2/repository/org/apache/maven/resolver/maven-resolver-api/1.3.1/maven-resolver-api-1.3.1.jar:/C//Users/buddy/.m2/repository/org/apache/maven/resolver/maven-resolver-spi/1.3.1/maven-resolver-spi-1.3.1.jar:/C//Users/buddy/.m2/repository/org/apache/maven/resolver/maven-resolver-util/1.3.1/maven-resolver-util-1.3.1.jar:/C//Users/buddy/.m2/repository/org/slf4j/jcl-over-slf4j/1.6.6/jcl-over-slf4j-1.6.6.jar:/C//Users/buddy/.m2/repository/net/openhft/jlbh/1.19.30/jlbh-1.19.30.jar:/C//Users/buddy/.m2/repository/junit/junit/4.13/junit-4.13.jar:/C//Users/buddy/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar:/C//Users/buddy/.m2/repository/org/slf4j/slf4j-simple/1.7.30/slf4j-simple-1.7.30.jar:/C//Users/buddy/.m2/repository/org/mockito/mockito-core/3.3.3/mockito-core-3.3.3.jar:/C//Users/buddy/.m2/repository/net/bytebuddy/byte-buddy/1.10.5/byte-buddy-1.10.5.jar:/C//Users/buddy/.m2/repository/net/bytebuddy/byte-buddy-agent/1.10.5/byte-buddy-agent-1.10.5.jar:/C//Users/buddy/.m2/repository/org/objenesis/objenesis/2.6/objenesis-2.6.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-module-junit4/2.0.7/powermock-module-junit4-2.0.7.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-module-junit4-common/2.0.7/powermock-module-junit4-common-2.0.7.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-reflect/2.0.7/powermock-reflect-2.0.7.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-core/2.0.7/powermock-core-2.0.7.jar:/C//Users/buddy/.m2/repository/org/javassist/javassist/3.27.0-GA/javassist-3.27.0-GA.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-api-mockito/1.7.4/powermock-api-mockito-1.7.4.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-api-mockito-common/1.7.4/powermock-api-mockito-common-1.7.4.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-api-support/1.7.4/powermock-api-support-1.7.4.jar:/C//Users/buddy/.m2/repository/net/openhft/affinity/3.2.3/affinity-3.2.3.jar:/C//Users/buddy/.m2/repository/com/google/guava/guava-testlib/19.0/guava-testlib-19.0.jar:/C//Users/buddy/.m2/repository/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar:/C//Users/buddy/.m2/repository/com/google/errorprone/error_prone_annotations/2.0.2/error_prone_annotations-2.0.2.jar:/C//Users/buddy/.m2/repository/com/google/guava/guava/19.0/guava-19.0.jar:/C//Users/buddy/.m2/repository/net/openhft/zero-allocation-hashing/0.8/zero-allocation-hashing-0.8.jar:/C//Users/buddy/.m2/repository/com/samskivert/samskivert/1.9/samskivert-1.9.jar:/C//Users/buddy/.m2/repository/org/apache/commons/commons-lang3/3.10/commons-lang3-3.10.jar:/C//Users/buddy/.m2/repository/io/hawt/hawtio-embedded/2.7.1/hawtio-embedded-2.7.1.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-webapp/9.4.6.v20170531/jetty-webapp-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-xml/9.4.6.v20170531/jetty-xml-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-util/9.4.6.v20170531/jetty-util-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-servlet/9.4.6.v20170531/jetty-servlet-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-security/9.4.6.v20170531/jetty-security-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-server/9.4.6.v20170531/jetty-server-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-http/9.4.6.v20170531/jetty-http-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-io/9.4.6.v20170531/jetty-io-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/skyscreamer/jsonassert/1.5.0/jsonassert-1.5.0.jar:/C//Users/buddy/.m2/repository/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1.jar:/C//Users/buddy/.m2/repository/net/openhft/stage-compiler/1.11/stage-compiler-1.11.jar:/C//Users/buddy/.m2/repository/net/openhft/spoon-core/4.4.1/spoon-core-4.4.1.jar:/C//Users/buddy/.m2/repository/org/eclipse/jdt/core/compiler/ecj/4.4.2/ecj-4.4.2.jar:/C//Users/buddy/.m2/repository/com/martiansoftware/jsap/2.1/jsap-2.1.jar:/C//Users/buddy/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar:/C//Users/buddy/.m2/repository/commons-io/commons-io/1.3.2/commons-io-1.3.2.jar:/C//Users/buddy/.m2/repository/it/unimi/dsi/fastutil/7.0.6/fastutil-7.0.6.jar:/C//Users/buddy/.m2/repository/org/junit/jupiter/junit-jupiter/5.7.0-M1/junit-jupiter-5.7.0-M1.jar:/C//Users/buddy/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.7.0-M1/junit-jupiter-api-5.7.0-M1.jar:/C//Users/buddy/.m2/repository/org/apiguardian/apiguardian-api/1.1.0/apiguardian-api-1.1.0.jar:/C//Users/buddy/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar:/C//Users/buddy/.m2/repository/org/junit/platform/junit-platform-commons/1.7.0-M1/junit-platform-commons-1.7.0-M1.jar:/C//Users/buddy/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.7.0-M1/junit-jupiter-params-5.7.0-M1.jar:/C//Users/buddy/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.7.0-M1/junit-jupiter-engine-5.7.0-M1.jar:/C//Users/buddy/.m2/repository/org/junit/platform/junit-platform-engine/1.7.0-M1/junit-platform-engine-1.7.0-M1.jar:/C//Java/jre/../lib/tools.jar \ No newline at end of file +/C//Users/buddy/.m2/repository/com/intellij/annotations/12.0/annotations-12.0.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-core/2.19.72-SNAPSHOT/chronicle-core-2.19.72-SNAPSHOT.jar:/C//Users/buddy/.m2/repository/org/jetbrains/annotations/19.0.0/annotations-19.0.0.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-values/2.19.42/chronicle-values-2.19.42.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-bytes/2.19.72-SNAPSHOT/chronicle-bytes-2.19.72-SNAPSHOT.jar:/C//Users/buddy/.m2/repository/com/squareup/javapoet/1.12.1/javapoet-1.12.1.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-threads/2.19.70/chronicle-threads-2.19.70.jar:/C//Users/buddy/.m2/repository/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-wire/2.19.74-SNAPSHOT/chronicle-wire-2.19.74-SNAPSHOT.jar:/C//Users/buddy/.m2/repository/net/openhft/compiler/2.3.6/compiler-2.3.6.jar:/C//Users/buddy/.m2/repository/net/openhft/chronicle-algorithms/2.19.42/chronicle-algorithms-2.19.42.jar:/C//Users/buddy/.m2/repository/net/java/dev/jna/jna/5.5.0/jna-5.5.0.jar:/C//Users/buddy/.m2/repository/net/java/dev/jna/jna-platform/5.5.0/jna-platform-5.5.0.jar:/C//Users/buddy/.m2/repository/com/thoughtworks/xstream/xstream/1.4.12/xstream-1.4.12.jar:/C//Users/buddy/.m2/repository/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1.jar:/C//Users/buddy/.m2/repository/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar:/C//Users/buddy/.m2/repository/org/codehaus/jettison/jettison/1.4.1/jettison-1.4.1.jar:/C//Users/buddy/.m2/repository/org/ops4j/pax/url/pax-url-aether/2.6.2/pax-url-aether-2.6.2.jar:/C//Users/buddy/.m2/repository/org/ops4j/pax/url/pax-url-aether-support/2.6.2/pax-url-aether-support-2.6.2.jar:/C//Users/buddy/.m2/repository/org/apache/maven/resolver/maven-resolver-impl/1.3.1/maven-resolver-impl-1.3.1.jar:/C//Users/buddy/.m2/repository/org/apache/maven/resolver/maven-resolver-api/1.3.1/maven-resolver-api-1.3.1.jar:/C//Users/buddy/.m2/repository/org/apache/maven/resolver/maven-resolver-spi/1.3.1/maven-resolver-spi-1.3.1.jar:/C//Users/buddy/.m2/repository/org/apache/maven/resolver/maven-resolver-util/1.3.1/maven-resolver-util-1.3.1.jar:/C//Users/buddy/.m2/repository/org/slf4j/jcl-over-slf4j/1.6.6/jcl-over-slf4j-1.6.6.jar:/C//Users/buddy/.m2/repository/net/openhft/jlbh/1.19.30/jlbh-1.19.30.jar:/C//Users/buddy/.m2/repository/junit/junit/4.13/junit-4.13.jar:/C//Users/buddy/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar:/C//Users/buddy/.m2/repository/org/slf4j/slf4j-simple/1.7.30/slf4j-simple-1.7.30.jar:/C//Users/buddy/.m2/repository/org/mockito/mockito-core/3.3.3/mockito-core-3.3.3.jar:/C//Users/buddy/.m2/repository/net/bytebuddy/byte-buddy/1.10.5/byte-buddy-1.10.5.jar:/C//Users/buddy/.m2/repository/net/bytebuddy/byte-buddy-agent/1.10.5/byte-buddy-agent-1.10.5.jar:/C//Users/buddy/.m2/repository/org/objenesis/objenesis/2.6/objenesis-2.6.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-module-junit4/2.0.7/powermock-module-junit4-2.0.7.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-module-junit4-common/2.0.7/powermock-module-junit4-common-2.0.7.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-reflect/2.0.7/powermock-reflect-2.0.7.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-core/2.0.7/powermock-core-2.0.7.jar:/C//Users/buddy/.m2/repository/org/javassist/javassist/3.27.0-GA/javassist-3.27.0-GA.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-api-mockito/1.7.4/powermock-api-mockito-1.7.4.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-api-mockito-common/1.7.4/powermock-api-mockito-common-1.7.4.jar:/C//Users/buddy/.m2/repository/org/powermock/powermock-api-support/1.7.4/powermock-api-support-1.7.4.jar:/C//Users/buddy/.m2/repository/net/openhft/affinity/3.2.4-SNAPSHOT/affinity-3.2.4-SNAPSHOT.jar:/C//Users/buddy/.m2/repository/com/google/guava/guava-testlib/19.0/guava-testlib-19.0.jar:/C//Users/buddy/.m2/repository/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar:/C//Users/buddy/.m2/repository/com/google/errorprone/error_prone_annotations/2.0.2/error_prone_annotations-2.0.2.jar:/C//Users/buddy/.m2/repository/com/google/guava/guava/19.0/guava-19.0.jar:/C//Users/buddy/.m2/repository/net/openhft/zero-allocation-hashing/0.8/zero-allocation-hashing-0.8.jar:/C//Users/buddy/.m2/repository/com/samskivert/samskivert/1.9/samskivert-1.9.jar:/C//Users/buddy/.m2/repository/org/apache/commons/commons-lang3/3.10/commons-lang3-3.10.jar:/C//Users/buddy/.m2/repository/io/hawt/hawtio-embedded/2.7.1/hawtio-embedded-2.7.1.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-webapp/9.4.6.v20170531/jetty-webapp-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-xml/9.4.6.v20170531/jetty-xml-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-util/9.4.6.v20170531/jetty-util-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-servlet/9.4.6.v20170531/jetty-servlet-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-security/9.4.6.v20170531/jetty-security-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-server/9.4.6.v20170531/jetty-server-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-http/9.4.6.v20170531/jetty-http-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/eclipse/jetty/jetty-io/9.4.6.v20170531/jetty-io-9.4.6.v20170531.jar:/C//Users/buddy/.m2/repository/org/skyscreamer/jsonassert/1.5.0/jsonassert-1.5.0.jar:/C//Users/buddy/.m2/repository/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1.jar:/C//Users/buddy/.m2/repository/net/openhft/stage-compiler/1.11/stage-compiler-1.11.jar:/C//Users/buddy/.m2/repository/net/openhft/spoon-core/4.4.1/spoon-core-4.4.1.jar:/C//Users/buddy/.m2/repository/org/eclipse/jdt/core/compiler/ecj/4.4.2/ecj-4.4.2.jar:/C//Users/buddy/.m2/repository/com/martiansoftware/jsap/2.1/jsap-2.1.jar:/C//Users/buddy/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar:/C//Users/buddy/.m2/repository/commons-io/commons-io/1.3.2/commons-io-1.3.2.jar:/C//Users/buddy/.m2/repository/it/unimi/dsi/fastutil/7.0.6/fastutil-7.0.6.jar:/C//Users/buddy/.m2/repository/org/junit/jupiter/junit-jupiter/5.7.0-M1/junit-jupiter-5.7.0-M1.jar:/C//Users/buddy/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.7.0-M1/junit-jupiter-api-5.7.0-M1.jar:/C//Users/buddy/.m2/repository/org/apiguardian/apiguardian-api/1.1.0/apiguardian-api-1.1.0.jar:/C//Users/buddy/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar:/C//Users/buddy/.m2/repository/org/junit/platform/junit-platform-commons/1.7.0-M1/junit-platform-commons-1.7.0-M1.jar:/C//Users/buddy/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.7.0-M1/junit-jupiter-params-5.7.0-M1.jar:/C//Users/buddy/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.7.0-M1/junit-jupiter-engine-5.7.0-M1.jar:/C//Users/buddy/.m2/repository/org/junit/platform/junit-platform-engine/1.7.0-M1/junit-platform-engine-1.7.0-M1.jar:/C//Java/jre/../lib/tools.jar \ No newline at end of file diff --git a/src/test/java/net/openhft/chronicle/map/fromdocs/acid/revelations/ChronicleStampedLock.java b/src/test/java/net/openhft/chronicle/map/fromdocs/acid/revelations/ChronicleStampedLock.java index e13a95e2c..5ffd5f141 100644 --- a/src/test/java/net/openhft/chronicle/map/fromdocs/acid/revelations/ChronicleStampedLock.java +++ b/src/test/java/net/openhft/chronicle/map/fromdocs/acid/revelations/ChronicleStampedLock.java @@ -1,8 +1,10 @@ package net.openhft.chronicle.map.fromdocs.acid.revelations; import net.openhft.affinity.AffinitySupport; +import net.openhft.chronicle.core.values.LongValue; import net.openhft.chronicle.map.ChronicleMap; import net.openhft.chronicle.map.ChronicleMapBuilder; +import net.openhft.chronicle.values.Values; import java.io.File; import java.io.IOException; @@ -20,26 +22,28 @@ import static net.openhft.chronicle.values.Values.newNativeReference; public class ChronicleStampedLock extends StampedLock { ChronicleMap chm; + ChronicleMap chmR; + ChronicleStampedLockVOInterface offHeapLock = newNativeReference(ChronicleStampedLockVOInterface.class); ChronicleStampedLockVOInterface lastWriterT = newNativeReference(ChronicleStampedLockVOInterface.class); -// ChronicleStampedLockVOInterface readerCount = -// newNativeReference(ChronicleStampedLockVOInterface.class); + LongValue readLockHolderCount = Values.newNativeReference(LongValue.class); + ChronicleStampedLock(String chronicelStampedLockLocality) { try { chm = offHeapLock(chronicelStampedLockLocality); + chmR = offHeapLockReaderCount(chronicelStampedLockLocality+"=ReaderCount"); chm.acquireUsing("Stamp ", offHeapLock); chm.acquireUsing("LastWriterTime ", lastWriterT); - //chm.acquireUsing("ReaderCount ", readerCount); + chmR.acquireUsing("ReaderCount ", readLockHolderCount); + //readLockHolderCount.setValue(0L); System.out.println( " ,@t=" + System.currentTimeMillis() + " ChronicleStampedLock constructed" + "," ); - //eaderCount.setEntryLockState(0L); - //chm.put("ReadederCount ", readerCount); } catch (IOException e) { e.printStackTrace(); } @@ -50,30 +54,31 @@ public class ChronicleStampedLock extends StampedLock { long l = 0; offHeapLock = chm.get("Stamp "); - do { + //do { l = (offHeapLock = chm.get("Stamp ")).getEntryLockState(); - System.out.println( - " ,,@t=" + System.currentTimeMillis() + - " ChronicleStampedLock waiting for unlockWrite()... " + - "" - ); - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } while (l < 0L); // wait until any holding Writer unlocks +// System.out.println( +// " ,,@t=" + System.currentTimeMillis() + +// " ChronicleStampedLock waiting for unlockWrite()... " + +// "" +// ); +// try { +// Thread.sleep(1000); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } + // } while ( /*l < 0L*/); // do not loop! @vgrazi confirms that in JCA rebooted app. offHeapLock.setEntryLockState(0L); - + long t = System.currentTimeMillis(); chm.put("Stamp ", offHeapLock); System.out.println( " ,@t=" + System.currentTimeMillis() + - " ChronicleStampedLock tryOptmisticRead() returned stamp=" + - l + + " ChronicleStampedLock saw stamp=["+l+"]"+ + " tryOptmisticRead() returning stamp=" + + t + "," ); - long t = System.currentTimeMillis(); + return (t); } @@ -82,10 +87,11 @@ public class ChronicleStampedLock extends StampedLock { offHeapLock = chm.get("Stamp "); lastWriterT = chm.get("LastWriterTime "); boolean ret = false; - if (lastWriterT.getEntryLockState() > stamp) { + if (lastWriterT.getEntryLockState() > stamp || offHeapLock.getEntryLockState() <0L) { ret = Boolean.FALSE; - } else + } else { ret = Boolean.TRUE; + } System.out.println( " ,@t=" + System.currentTimeMillis() + " ChronicleStampedLock validate(" + @@ -108,7 +114,6 @@ public class ChronicleStampedLock extends StampedLock { offHeapLock = chm.get("Stamp "); lastWriterT = chm.get("LastWriterTime "); - //readerCount = chm.get("ReaderCount "); do { System.out.println( @@ -120,14 +125,12 @@ public class ChronicleStampedLock extends StampedLock { ); offHeapLock = chm.get("Stamp "); l = offHeapLock.getEntryLockState(); - //readerCount = chm.get("ReaderCount "); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } - //} while (l != 0L || readerCount.getEntryLockState() > 0); - } while (l != 0L); + } while (l != 0L || readLockHolderCount.getValue() > 0); System.out.println( " ,@t=" + System.currentTimeMillis() + " ChronicleStampedLock tryWriterLock() RESUMING " + @@ -135,7 +138,7 @@ public class ChronicleStampedLock extends StampedLock { ); long t = System.currentTimeMillis(); try { - Thread.sleep((long) (Math.random()* 1000)); //sleep up to 1 second + Thread.sleep((long) (Math.random() * 1000)); //sleep up to 1 second } catch (InterruptedException e) { e.printStackTrace(); } @@ -157,7 +160,7 @@ public class ChronicleStampedLock extends StampedLock { long l = 0; offHeapLock = chm.get("Stamp "); - //readerCount = chm.get("ReaderCount "); + readLockHolderCount = chmR.get("ReaderCount "); do { System.out.println( @@ -173,69 +176,75 @@ public class ChronicleStampedLock extends StampedLock { e.printStackTrace(); } } while (l < 0L); + try { + Thread.sleep((long) (Math.random() * 2000)); //sleep up to 1 second + } catch (InterruptedException e) { + e.printStackTrace(); + } System.out.println( " ,@t=" + System.currentTimeMillis() + " ChronicleStampedLock tryReadLock() RESUMING " + //" readerCount=[" + readerCount.getReaderCount() + "]" + - " readerCount=[" + l + "]" + + " readerCount=[" + readLockHolderCount.getVolatileValue() + "]" + + " BEFORE addAtomic(1) "+ "," ); - // readerCount.addAtomicReaderCount(1); + readLockHolderCount.addAtomicValue(1); + - //long t = System.currentTimeMillis(); try { - Thread.sleep((long) (Math.random()* 1000)); //sleep up to 1 second + Thread.sleep((long) (Math.random() * 1000)); //sleep up to 1 second } catch (InterruptedException e) { e.printStackTrace(); } - offHeapLock.setEntryLockState(l+1); //negative ==> Writer holds StampedLock + offHeapLock.setEntryLockState( + readLockHolderCount.getVolatileValue() + ); //negative ==> Writer holds StampedLock chm.put("Stamp ", offHeapLock); - //chm.put("ReaderCount ", readerCount); System.out.println( " ,@t=" + System.currentTimeMillis() + " ChronicleStampedLock tryReadLock() returned stamp=" + offHeapLock.getEntryLockState() + - " readerCount=[" + offHeapLock.getEntryLockState() + "]" + + " readerCount=[" + readLockHolderCount.getVolatileValue() + "]" + + " AFTER addAtomic(1) "+ "," ); + chmR.put("ReaderCount ", readLockHolderCount); return (offHeapLock.getEntryLockState()); } @Override public void unlockRead(long stamp) { offHeapLock = chm.get("Stamp "); - //readerCount = chm.get("ReaderCount "); + readLockHolderCount = chmR.get("ReaderCount "); + System.out.println( " ,@t=" + System.currentTimeMillis() + " ChronicleStampedLock unlockRead(" + stamp + ") unlocking.." + - "ReaderCount=[" + offHeapLock.getEntryLockState() +"]"+ + "ReaderCount=[" + readLockHolderCount.getVolatileValue() + "]" + + " BEFORE addAtomic(-1) "+ "," ); - offHeapLock.setEntryLockState(offHeapLock.getEntryLockState()-1); - -// if (readerCount.getReaderCount() == 0) { -// offHeapLock.setEntryLockState(0L); -// } + readLockHolderCount.addAtomicValue(-1); + System.out.println( + " ,@t=" + System.currentTimeMillis() + + " ChronicleStampedLock unlockRead(" + stamp + ") unlocking.." + + "ReaderCount=[" + readLockHolderCount.getVolatileValue() + "]" + + " AFTER addAtomic(-1) "+ + "," + ); + offHeapLock.setEntryLockState(readLockHolderCount.getVolatileValue()); System.out.println( " ,@t=" + System.currentTimeMillis() + - "ReaderCount=[" + offHeapLock.getEntryLockState() + "[" + + "offHeapLock=[" + offHeapLock.getEntryLockState() + "]" + "," ); chm.put("Stamp ", offHeapLock); - - System.out.println( - " ,@t=" + System.currentTimeMillis() + - " ChronicleStampedLock unlockRead(" + - stamp + - ") unlocked. set to Zero. ReaderCount=[" + - offHeapLock.getEntryLockState() +"]"+ - "," - ); - //chm.put("ReaderCount ", readerCount); + chmR.put("ReaderCount ", readLockHolderCount); } @@ -270,4 +279,18 @@ public class ChronicleStampedLock extends StampedLock { ) ); } + + static ChronicleMap offHeapLockReaderCount(String operand) + throws IOException { + + AffinitySupport.setThreadId(); + return ChronicleMapBuilder.of(String.class, LongValue.class) + .entries(16) + .averageKeySize("123456789".length()) + .createPersistedTo( + new File( + operand + ) + ); + } }