While 1) is probably a bug made by the user it shows that threading and sharing state is too hard in Nim currently. In a perfect world the user wouldn't be able to make bugs like that unless they tried really hard, and this is the case for the most part when doing single-threaded Nim. But as soon as you get over to the realm of multi-threading it seems like the Nim approach so far has been "you're on your own" by default. Don't get me wrong, I like that we're _[able](https://forum.nim-lang.org/postActivity.xml#able) to go low level in Nim, and for some things it is really necessary, but that it is the default when doing threading isn't great.
The situation is slowly improving, and ARC seems to be very nice for threading. But we really needs some better standard library modules that wraps the low-level concepts of threading in a nice user-friendly package.