/* * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package vm.mlvm.share; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; import nsk.share.Log.TraceLevel; import vm.share.options.Option; /** * The test looks for late CPU stores, which is not visible for other CPU. *

* In absence of synchronization (such as memory barriers and so on), typical modern CPUs * (Intel x86 32/64, SPARC in TSO mode) put stores into buffer instead of immediately writing them to memory. * * So the following program: * * write A * read B * * can actually be transformed to and seen by other processors as: * * read B * write A * *

* DekkerTest runs two threads, A and B, which perform operations on a shared array of Actors concurrently. * Reordering mentioned above is detected by the test and reported as failure * (unless mayFail option is specified in the constructor or command-line option). * *

* The tests should subclass Actor with test-specific data and code. * The Actor subclass requirements: * *