Ukoliko nisi ekspert u C++ i za multi-platform programming, onda je verovatno lakse da uzmes neki drugi jezik (ako ti je cilj da resis problem; ako ti je cilj da ucis, onda uzmi jezik koji ti se najvise svidja :-) )
Multi-core/multi-cpu: to bi trebalo da dobijes za "dz" od operativnog sistema. Iz tvoje aplikacije obicno nemas potrebe da brines sta se na kom procesoru izvrsasva, to radi operativni sistem za tebe. Windows ima API za citanje broja procesora, verovatno je to slucaj i sa drugim OS-ovima.
Sinhronizacija: koristis ono sto nudi platforma (OS odnosno virtuelna masina). Svi do sada pomenuti jezici imaju podrsku. Ako koristis C++ i hoces da ti kod bude lako portabilan, onda mozes da koristis neku od portabilnih bibilioteka koje apstrahuju API koji nudi dati operativni sistem. Postoji i metoda sinhronizacije bez "lockova" - potrazi 'lockless synchronization'.
Za kraj misao opsteg karaktera: ukoliko si dobro definisao problem implementiraj resenje u jeziku koji najbolje poznajes. Kljucno je da pazis na algoritme i strukture podataka koje koristis. Kasnije, kada dobijes verziju koja radi ispravno (referentnu) mozes da vrsis optimizacije, re-implementaciju u nekom drugom jeziku i td.
p.s. Da li si razmatrao lisp/scheme? Ovi jezici verovatno nisu sampioni u brzini, ali su veoma interesantni i cesto iznenade svojim performansama, a nude drugaciju programsku metaforu koja se tesko implementira u imperativnim jezicima. Za odredjenu vrstu problema je funkcionalno programiranje "prirodno".