Make SingleThreadMarkAndSweep support multiple threads
This commit is contained in:
committed by
Space
parent
10ae9c511b
commit
9ebba93dd9
@@ -59,27 +59,36 @@ data class Data(var int: Int)
|
||||
assertFailsWith<InvalidMutabilityException> { a8[1] = 2.0 }
|
||||
|
||||
// Ensure that String and integral boxes are frozen by default, by passing local to the worker.
|
||||
val hasToBeFrozen = Platform.memoryModel == MemoryModel.STRICT
|
||||
val worker = Worker.start()
|
||||
var data: Any = "Hello" + " " + "world"
|
||||
assert(data.isFrozen)
|
||||
if (hasToBeFrozen) {
|
||||
assertTrue(data.isFrozen)
|
||||
}
|
||||
worker.execute(TransferMode.SAFE, { data } ) {
|
||||
input -> println("Worker 1: $input")
|
||||
}.result
|
||||
|
||||
data = 42
|
||||
assert(data.isFrozen)
|
||||
if (hasToBeFrozen) {
|
||||
assertTrue(data.isFrozen)
|
||||
}
|
||||
worker.execute(TransferMode.SAFE, { data } ) {
|
||||
input -> println("Worker2: $input")
|
||||
}.result
|
||||
|
||||
data = 239.0
|
||||
assert(data.isFrozen)
|
||||
if (hasToBeFrozen) {
|
||||
assertTrue(data.isFrozen)
|
||||
}
|
||||
worker.execute(TransferMode.SAFE, { data } ) {
|
||||
input -> println("Worker3: $input")
|
||||
}.result
|
||||
|
||||
data = 'a'
|
||||
assert(data.isFrozen)
|
||||
if (hasToBeFrozen) {
|
||||
assertTrue(data.isFrozen)
|
||||
}
|
||||
worker.execute(TransferMode.SAFE, { data } ) {
|
||||
input -> println("Worker4: $input")
|
||||
}.result
|
||||
@@ -87,4 +96,4 @@ data class Data(var int: Int)
|
||||
worker.requestTermination().result
|
||||
|
||||
println("OK")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user