количество потоков на количество ядер завязывают обычно программисты, да, это оптимальный вариант. Но это не обязательно. Все-равно операционная система будет сама этим всем управлять. К тому же, насколько я знаю, в ядре линукс (например) потоки приравнены к процессам. Т.е. на каждый поток в твоем приложении операционная система будет выделять время процессора так же, как и на остальные процессы в системе (близкие по приоритету). Рискну предположить, что во FreeBSD тоже так. Ну а macos и ios основаны на FreeBSD.
Мутексов (мьютексов) пугаться не надо. Это просто вариант синхронизировать что-то с чем-то. Для простоты, пока не разберешься, можешь сделать 1 глобальный мутекс на все объекты. И блокировать весь мир целиком. Заблокировал, обновил мир, разблокировал.