blob: 8a8810edc83aaa0fc29892975c4a583168207f05 [file] [log] [blame]
// TARGET_BACKEND: NATIVE
import kotlin.native.concurrent.*
import kotlin.concurrent.*
@OptIn(kotlin.ExperimentalStdlibApi::class)
@Volatile var x = 0
var y = -1
fun box() : String {
if (Platform.memoryModel != MemoryModel.EXPERIMENTAL) {
// The test doesn't make sense for legacy mm, you can't have anything non-atomic to protect with @Volatile var
return "OK"
}
val w1 = Worker.start()
val w2 = Worker.start()
val f1 = w1.execute(TransferMode.SAFE, { -> }) {
repeat(10000) {
while (x != 0) {}
y = it
x = 1
}
"O"
}
val f2 = w2.execute(TransferMode.SAFE, { -> }) {
var result = "K"
repeat(10000) {
while (x != 1) {}
if (y != it) result = "FAIL"
x = 0
}
result
}
return (f1.result + f2.result).also {
w1.requestTermination().result
w2.requestTermination().result
}
}