Будет не очень полезно мьютексировать функции getPtr и setPtr. Даже после того, как вызывающая сторона получает указатель и освобождает мьютекс, она все равно может делать с полученным указателем все, что захочет. Это определенно может вызвать проблемы с несколькими потоками.
Вы действительно хотите поместить свои механизмы блокировки в сами классы SomeType1 и SomeType2. Например, вы можете получить мьютекс в начале каждой функции-члена SomeType1, а затем освободить мьютекс перед возвратом каждой функции-члена.
Некоторые из ваших функций-членов уже могут быть поточно-ориентированными. Например, если они не обращаются к переменным-членам или каким-либо другим общим ресурсам, то нет никакой возможности конфликта между потоками. Таким образом, вам не придется мьютекс тех. Но вам нужно будет посмотреть на каждую из ваших функций-членов и спросить себя, что произойдет, если переменные-члены, используемые этими функциями, неожиданно изменились. Если поведение будет нежелательным, то эта функция-член должна быть взаимно изменена.
Но если вас беспокоит то, что сами переменные-указатели будут повреждены, это зависит от архитектуры машины, для которой вы компилируете. Для многих систем (для которых присвоение 32-битного указателя является атомарной операцией) это не будет проблемой вообще. На этот вопрос дан более полный ответ здесь .