问题标签 [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.

0 投票
1 回答
443 浏览

java - 对 ReentrantReadWriteLock#tryLock 失败的 jcstress 测试感到困惑

我正在努力掌握 JCStress。为了确保我理解它,我决定为我知道必须正确的东西编写一些简单的测试:java.util.concurrent.locks.ReentrantReadWriteLock.

我写了一些非常简单的测试来检查锁定模式的兼容性。不幸的是,其中两个压力测试失败了:

  1. X_S

    /li>
  2. X_X

    /li>

在我看来,一个线程不应该能够持有读锁,而另一个线程也持有写锁。同样,两个线程应该不可能同时持有写锁。

我意识到问题可能与ReentrantReadWriteLock. 我认为我可能在 jcstress 测试中犯了一些关于 JMM 和读取锁状态的愚蠢错误。

不幸的是,我无法发现问题。有人可以帮我理解我犯的(愚蠢的?)错误吗?

我确实尝试过询问这个问题,jcstress-dev但从未收到回复 - http://mail.openjdk.java.net/pipermail/jcstress-dev/2018-August/000346.html。为交叉发布道歉,但我需要帮助,所以我重新发布到 StackOverflow,希望得到更多观众的关注。

0 投票
1 回答
1224 浏览

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 上分享一个很好的入门教程来解释它的能力和功能,那就太好了)

0 投票
2 回答
342 浏览

java - 运行 jcstress 期间出错:VM 选项“StressLCM”正在开发中,仅在 VM 的调试版本中可用

我正在尝试运行 jcstress 0.5,但出现错误:

完整日志:

我用来运行测试的命令:

0 投票
1 回答
96 浏览

java - 如何在 jcstress 测试中产生指令重新排序

当我怀疑 java 语言规范允许某些指令重新排序时,我想在 jcstress 测试中重现它。我怎样才能做到这一点?例如,在下面的代码中,加载和存储指令(我相信)允许在某些运行时环境中重新排序执行。但是,当我在 Intel x84_64 Ubuntu 中运行 jcstress 时,结果并未显示发生任何重新排序。

0 投票
3 回答
92 浏览

java - final 字段是否保证字段值在不同的线程中可见?

JCStress用来测试最终变量。我知道这final可以用来确保当您构造一个对象时,访问该对象的另一个线程不会看到该对象处于部分构造状态。现在我有一个A.java

据我所知,构造函数应该这样执行

现在我正在使用下面提到的测试。

现在,为什么我在输出中看到值 0?我的 CPU 架构是 x86,因此使用负载重新排序存储也没有意义。我得到的输出是

另外,我发现另一件不寻常的事情是,当我将字段声明astatic. 我的输出只有 42,这是为什么呢?

0 投票
1 回答
81 浏览

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

我们看到了竞态条件,但是如果我放入staticvolatile 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 问题?