Hi. I thought I understood how the local heap in Nim works, but this simple 
example shows that I don't (it throw an exception).  What am I doing/thinking 
wrong?
    
    
    var myLocalThreadID = -1
    
    proc initThreadID*(tid: int): void =
      ## Initialises the ThreadID. Can only be called once!
      if myLocalThreadID != -1:
        raise newException(Exception, "ThreadID already initialised: " & 
$myLocalThreadID)
      myLocalThreadID = tid
    
    when isMainModule:
      initThreadID(0)
      # ...
      
      proc receiver() {.thread.} =
        initThreadID(1)
        # ...
        echo("receiver done!")
      
      var thread: Thread[void]
      createThread[void](thread, receiver)
      
      joinThread(thread)
      
      echo("main done!")
    

My assumption was that every thread, including the main thread, should get it's 
_own copy_ of "myLocalThreadID" (because it's not _{.global.}_), safely 
initialized to "-1" for each thread. This test proves me wrong. So either 
"myLocalThreadID" is not local, or it is not initialised to "-1" (or something 
else even stranger?).

Reply via email to