First of all, you need to create multiple threads only if your need parallel independent processing logic dictated by the semantic of your application. If you hope to improve performance using threads, you well make it only worse if the number of threads exceed the number of cores. Remember that multithreading incurs some considerable overhead.
Now, about "truly parallel". The threads use the cores they use. However, you can affect the use of the cores using thread and process
affinity. Please see my past answer:
How to program multicore[
^].
—SA