问题标签 [jcstress]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 对 ReentrantReadWriteLock#tryLock 失败的 jcstress 测试感到困惑
我正在努力掌握 JCStress。为了确保我理解它,我决定为我知道必须正确的东西编写一些简单的测试:java.util.concurrent.locks.ReentrantReadWriteLock
.
我写了一些非常简单的测试来检查锁定模式的兼容性。不幸的是,其中两个压力测试失败了:
/li>X_S
:
/li>X_X
:
在我看来,一个线程不应该能够持有读锁,而另一个线程也持有写锁。同样,两个线程应该不可能同时持有写锁。
我意识到问题可能与ReentrantReadWriteLock
. 我认为我可能在 jcstress 测试中犯了一些关于 JMM 和读取锁状态的愚蠢错误。
不幸的是,我无法发现问题。有人可以帮我理解我犯的(愚蠢的?)错误吗?
我确实尝试过询问这个问题,jcstress-dev
但从未收到回复 - http://mail.openjdk.java.net/pipermail/jcstress-dev/2018-August/000346.html。为交叉发布道歉,但我需要帮助,所以我重新发布到 StackOverflow,希望得到更多观众的关注。
java - 运行第一个 JCStress 测试
我是 JCStress 的新手,我正在尝试为 JCStress 运行“hello world”,但遇到了一些问题。我认为我缺少一些明显的东西。
我从以下公共 Maven 原型创建的模板项目开始:
我做了一个mvn clean install
并得到了.\target\jcstress.jar
. 我添加MyConcurrencyTest
了在包中有以下代码org.sample
以下是我的项目结构:
现在我正在尝试使用此命令运行它(我的当前目录是执行此命令时的项目根目录)
但是org.sample.MyConcurrencyTest
不要被执行。
(我知道,如果我们不指定使用-t <testname>
来自的测试的测试jcstress.jar/META-INF/TestList
。)我认为我遗漏了一些非常明显的东西。有人可以帮忙吗?
(如果有人可以在 JCStress 上分享一个很好的入门教程来解释它的能力和功能,那就太好了)
java - 运行 jcstress 期间出错:VM 选项“StressLCM”正在开发中,仅在 VM 的调试版本中可用
我正在尝试运行 jcstress 0.5,但出现错误:
完整日志:
我用来运行测试的命令:
java - 如何在 jcstress 测试中产生指令重新排序
当我怀疑 java 语言规范允许某些指令重新排序时,我想在 jcstress 测试中重现它。我怎样才能做到这一点?例如,在下面的代码中,加载和存储指令(我相信)允许在某些运行时环境中重新排序执行。但是,当我在 Intel x84_64 Ubuntu 中运行 jcstress 时,结果并未显示发生任何重新排序。
java - final 字段是否保证字段值在不同的线程中可见?
我JCStress
用来测试最终变量。我知道这final
可以用来确保当您构造一个对象时,访问该对象的另一个线程不会看到该对象处于部分构造状态。现在我有一个A.java类
据我所知,构造函数应该这样执行
现在我正在使用下面提到的测试。
现在,为什么我在输出中看到值 0?我的 CPU 架构是 x86,因此使用负载重新排序存储也没有意义。我得到的输出是
另外,我发现另一件不寻常的事情是,当我将字段声明a
为static
. 我的输出只有 42,这是为什么呢?
java - JCStress - 奇怪的 volatile 和 static 关键字行为
我有这个简单的 Jcstress 测试:
但是这个测试的结果是:
[OK] io.denery.RaceIRIWTest(JVM 参数:[-XX:+UnlockDiagnosticVMOptions,-XX:+WhiteBoxAPI,-XX:-RestrictContended,-Dfile.encoding=UTF-8,-Duser.country=RU,-Duser。 language=en, -Duser.variant, -XX:-TieredCompilation, -XX:+StressLCM, -XX:+StressGCM, -XX:+StressIGVN]) Observed state Occurrences Expectation Interpretation
0, 0, 0, 0 22,180,923 ACCEPTABLE_INTERESTING
0, 0, 0, 1 721,581 ACCEPTABLE_INTERESTING
0, 0, 1, 0 13,347 ACCEPTABLE_INTERESTING
0, 0, 1, 1 456,971 ACCEPTABLE_INTERESTING
0, 1, 0, 0 344,068 ACCEPTABLE_INTERESTING 0, 1, 0
, 1, 36 ACCEPTABLE_INTERESTING
528,641 ACCEPTABLE_INTERESTING
0, 1, 1, 1 258,265 ACCEPTABLE_INTERESTING
1, 0, 0, 0 204,088 ACCEPTABLE_INTERESTING
1, 0, 0, 1 667,580 ACCEPTABLE_INTERESTING
1, 0, 1, 1 94,877 ACCEPTABLE_INTERESTING
1, 1, 0, 0 663,159 ACCEPTABLE_INTERESTING 1 ,
1, 0, 1 306,251 ACCEPTABLE_INTERESTING
, 0 128,608 ACCEPTABLE_INTERESTING
1, 1, 1, 1 18,838,186 ACCEPTABLE_INTERESTING
我们看到了竞态条件,但是如果我放入static
并volatile int x, y
删除volatile
关键字,那么 jcstress 测试的结果将是:
[OK] io.denery.RaceIRIWTest(JVM 参数:[-XX:+UnlockDiagnosticVMOptions,-XX:+WhiteBoxAPI,-XX:-RestrictContended,-Dfile.encoding=UTF-8,-Duser.country=RU,-Duser。 language=en, -Duser.variant, -XX:-TieredCompilation, -XX:+StressLCM, -XX:+StressGCM, -XX:+StressIGVN]) Observed state Occurrences Expectation 解释
1, 1, 1, 1 100,299,061 ACCEPTABLE_INTERESTING
为什么 volatile 不修复竞争条件,但 static 关键字修复它?或者这是一个 Jcstress 问题?