If each task is completely separated from each other, then just run each one in a its own thread. If you want to make sure that each thread runs on a separate core, you can heack a little with OS functions, but that shouldn't be necessary, the OS is supposed to dispatch threads optimally.