43 lines
1.0 KiB
Kotlin
Vendored
43 lines
1.0 KiB
Kotlin
Vendored
// TARGET_BACKEND: NATIVE
|
|
|
|
import kotlin.native.concurrent.*
|
|
import kotlin.concurrent.*
|
|
|
|
|
|
|
|
@OptIn(kotlin.ExperimentalStdlibApi::class)
|
|
@Volatile var x = 0
|
|
var y = -1
|
|
|
|
fun box() : String {
|
|
@OptIn(kotlin.experimental.ExperimentalNativeApi::class)
|
|
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
|
|
}
|
|
} |