You shouldn't use threads unless you really need them. And you shouldn't need more than a few threads (2, 3, ...). 10 threads sounds too much for me. What are these threads doing exactly, and why?
Do you really need concurrency on the operations you're performing? Each thread depends on the others to it's progress? Or you can identify single operations, depending on each other, but that can be executed sequentially in a way that each operation can use the results of the previous one?
A game usually does all the updates sequentially, followed by the drawing methods, all on the main program's thread.
About the crashings, may be occurring if you're sharing variables but not protecting their access with locks. Only one thread should access them at a time (this also slows down threads substantially, because they have to wait for each other to access the shared variables).
If you say that they are not in sync, you might be running them concurrently without communication between each other - like, they don't wait for each other, so every thread runs independently with no warranties of sync at all. If threads depends on each others but don't wait for each other, then results are always unpredictable. If they doesn't depend on each other, then consider if you need them running concurrently.