Skip to content

Instantly share code, notes, and snippets.

@kpgalligan
Created May 23, 2019 15:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kpgalligan/43f783d2c69b4a5d6d980b19d0f2ce87 to your computer and use it in GitHub Desktop.
Save kpgalligan/43f783d2c69b4a5d6d980b19d0f2ce87 to your computer and use it in GitHub Desktop.
package sample
import kotlin.native.concurrent.ThreadLocal
import kotlin.native.concurrent.TransferMode
import kotlin.native.concurrent.Worker
import kotlin.native.concurrent.freeze
import kotlin.test.Test
import kotlin.test.assertEquals
class WorkerStorageTest{
@Test
fun storeThings(){
val ws = WorkerStorage()
for(i in 0 until 100_000){
ws.put("key $i", SomeData("data $i"))
}
for(i in 0 until 100_000){
val stored = ws.get("key $i")
if(i % 100 == 0)
assertEquals(stored, SomeData("data $i"))
}
}
}
class WorkerStorage {
private val worker = Worker.start()
fun get(key: String): SomeData? {
return worker.execute(TransferMode.SAFE, { key }) {
Storage.map.get(it)
}.result
}
fun put(key: String, value: SomeData) {
worker.execute(TransferMode.SAFE, { Pair(key, value).freeze() }) {
Storage.map.set(it.first, it.second)
}
}
}
@ThreadLocal
private object Storage {
val map = HashMap<String, SomeData>()
}
data class SomeData(val s: String)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment