I noticed that I cant't use ref variable in thread even with orc (it said that with orc we have shared memory) For example
var workers: array[10, Thread[void]]
var name = "Hey"
proc printer() {.gcsafe.} =
echo name
for i in 0..high(workers):
createThread(workers[i], printer)
joinThreads(workers)
echo "Hello, World!"
Compile like this nim c -r --threads:on --mm:orc main.nim
And get such an error Error: 'printer' is not GC-safe as it accesses 'name' which is a global using GC'ed memory
I can fix it like this
proc printer() =
{.cast(gcsafe).}:
withLock myLock:
echo name
My question If I use {.cast(gcsafe).} and use lock around shared variable will I get safe code ? Or I still can mess reference counter of a shared variable?
And Is it valid way of accessing shared variables? For example if I want to use hash table as cache between threads