Во-первых, давайте проясним, что ничего из этого не является поточно-ориентированным.Синхронизация необходима, если вы действительно собираетесь делать это из нескольких потоков.
Во-вторых, вам также следует постараться сделать выводы из своей неспособности вызвать конкретный сбой.Они, как известно, трудно проявить.Кроме того, вы тестируете очень узкий набор поведений, никогда не проверяете, успешны ли чтения, являются ли возвращаемые объекты внутренне согласованными и т. Д.
Что касается повторного добавления одного и того же объекта в набор, это не так.отличный тест, потому что последующие добавления, несомненно, определяют, что объект уже находится в наборе и, следовательно, практически не происходит мутации.
В вашем примере с пользовательским объектом все, что вы делаете, это изменяете один указатель, но никогда не используете его.Кроме того, определенные аппаратные функции в любом случае затруднят проявление каких-либо проблем.Это не означает, что вам не нужна синхронизация, но только то, что она будет чрезвычайно сложной для выявления проблемы.
Кроме того, синхронизация пользовательского объекта, такого как «человек», обычно должна происходить на более высоком уровне абстракции (например, при изменении полного имени человека при одновременном чтении действительно следует ожидать всех трех свойств, во-первых, среднего).и фамилию, чтобы закончить, или иначе вы можете поймать это в каком-то неопределенном состоянии).
Итог, вы действительно должны синхронизировать ваше взаимодействие с изменяемым множеством и вашим изменяемым объектом person, если вы собираетесьчтобы получить к ним доступ из нескольких потоков.
Я бы посоветовал вам исследовать средство очистки потока (TSAN, его друзьям).Итак, в Xcode, перейдите в «Редактор», «Схема», «Редактировать схему ...» и включите средство очистки потока:
Thisпоможет вам определить небезопасный доступ из нескольких потоков.Для получения дополнительной информации см. Видео Thread Sanitizer и Static Analyzer .
Но, как Apple советует в приведенном выше видео, «нет такой вещи, как« мягкая »гонка».