В вашем примере нет возможности гонки (он правильно заблокирован). Тем не менее, вы должны быть очень осторожны с shared_ptr
в многопоточном коде. Пожалуйста, имейте в виду, что есть вероятность, что у вас есть доступ к одному и тому же объекту через разные shared_ptrs из разных потоков. Например, после:
Thread B:
shared_ptr<CResource> nowResource;
base.SetResource(nowResource);
...
поток B все еще имеет доступ к nowResource. Если поток A получает ресурс ptr, оба потока могут одновременно использовать объект без какой-либо синхронизации!
Это, конечно, условие гонки.