JCStress -Testergebnisse, die ich nicht verstehen kann
Posted: 05 Feb 2025, 10:14
Kann mir jemand helfen, zu verstehen, warum ich in dieser JCStress verbotene Ergebnisse bekomme? Das Szenario ist einfach. Wir haben auch zwei Akteure, die genau gleich sind - sie erfassen den Staat und das Ergebnis der Operation speziell in dieser Reihenfolge. Der Test liefert keine verbotenen Ergebnisse mit einem Einzelleser -Schauspieler. < /P>
Code: Select all
public class RequestResultTest {
@JCStressTest
@Outcome(id = "1, 12345", expect = Expect.ACCEPTABLE)
@Outcome(id = "0, 0", expect = Expect.ACCEPTABLE)
@Outcome(id = "0, 12345", expect = Expect.ACCEPTABLE)
@Outcome(id = "1, 0", expect = Expect.FORBIDDEN, desc = "State is finished, but not result recorded")
@State
public static class SingleWriterMultiReaderTest {
private final SomeResult underTest;
public SingleWriterMultiReaderTest() {
this.underTest = new SomeResult();
}
@Actor
public void finish() {
underTest.finish(12345L);
}
@Actor
public void getStateAndResult1(IJ_Result result) {
int state = underTest.getState();
long longResult = underTest.getValue();
result.r1 = state;
result.r2 = longResult;
}
@Actor
public void getStateAndResult2(IJ_Result result) {
int state = underTest.getState();
long longResult = underTest.getValue();
result.r1 = state;
result.r2 = longResult;
}
}
public static final class SomeResult {
public static final int RUNNING = 0;
public static final int FINISHED = 1;
private volatile int state;
private long value;
public SomeResult() {
this.value = 0L;
this.state = RUNNING;
}
void finish(long value) {
this.value = value;
this.state = FINISHED;
}
public long getValue() {
return value;
}
public int getState() {
return state;
}
}
}
< /code>
Hier ist einer der Ausgänge. < /p>
Compilation: split
finish: Interpreter
getStateAndResult1: C1
getStateAndResult2: C2
JVM args: [-Dfile.encoding=UTF-8, -XX:-UseBiasedLocking, -XX:+StressLCM, -XX:+StressGCM, -XX:+StressIGVN, -XX:+StressCCP, -XX:StressSeed=1773949580]
Fork: #1
RESULT SAMPLES FREQ EXPECT DESCRIPTION
0, 0 142,382,593 97,91% Acceptable
0, 12345 116,937 0,08% Acceptable
1, 0 7,940