Threading isn't a "magic bullet": it's complicated, particularly when you try to get two threads operating on the same data.
Think about it for a moment: each thread runs on a separate core, each with it's own processor and (at least) L1 instruction and data caches. And by design, they don't know about each other. Combine that with register optimization in the JIT compiled code, and it's unlikely that they share any "real" data at all!
To make life even more fun, a simple instruction in C# like
i++;
is not atomic in machine code: it may be a fetch of
i
as one machine instruction, an increment as a second, and a store as a third. And since cores are independant, even if a value is genuinely stored in no cached memory there is no guarantee that the change will be done correctly because two cores could be reading it at the same time, changing it at the same time, or storing it at the same time - and the last one to execute wins the result!
So when you have a tight loop operating with minimal data, the chances are that it's all working in registers or cache inside the running core, and any changes one thread makes to a variable aren't reflected back to the actual memory until the thread is p paused by OS to free up the core for other threads in the system.
When this happens, your data is called "not thread safe" and very odd, unpredictable, and even intermittent effects can be seen.
To make it thread safe, you have to "lock" the data so other threads can't access it, do what you need with it, then unlock it again each time you want to do anything. And that means the other threads are paused waiting for you to release the lock, because they have to do exactly the same thing each time!
And that raises it's own problems if you aren't careful: deadlocks, where each thread is paused waiting for a lock the other has taken for example; ora massive slowdown in processing speed because locking adds it's own overhead and if threads are constantly waiting for other thread to finish with something, it can get slower than a single-threaded app!
And your design? That's not thread safe, not even close. And making it thread safe is going to take a lot of sitting down and thinking ... once you have finished researching thread safety which is going to take a while as well!