Пожалуйста, попробуйте это.
SELECT
DISTINCT id,NAME
FROM
tableName
Из документации повышения:
shared_ptr
объекты предлагают тот же уровень потокобезопасности как встроенные типы. Ashared_ptr
экземпляр может быть "считан" (получил доступ к использованию только операции константы), одновременно несколькими потоками. Отличающийсяshared_ptr
экземпляры могут быть "записаны в" (получил доступ к использующим изменяемым операциям такой какoperator=
или сброс) одновременно несколькими потоками (даже когда эти экземпляры являются копиями и совместно используют тот же подсчет ссылок внизу.)Любые другие одновременные доступы приводят к неопределенному поведению.
Таким образом, Ваше использование не безопасно, так как оно использует одновременное чтение и запись m_res
. Пример 3 в документации повышения также иллюстрирует это.
Необходимо использовать отдельное взаимное исключение, которое охраняет доступ к m_res
в SetResource
/GetResource
.
boost::shared_ptr<>
предлагает определенный уровень потокобезопасности. Подсчетом ссылок управляют ориентированным на многопотоковое исполнение способом (если Вы не настраиваете повышение для отключения поддержки поточной обработки).
Таким образом, можно скопировать a shared_ptr
вокруг и ref_count сохраняется правильно. То, что Вы не можете сделать безопасно в нескольких потоках, изменяют фактическое shared_ptr
сам экземпляр объекта от нескольких потоков (таких как вызов reset()
на нем от нескольких потоков). Таким образом, Ваше использование не безопасно - Вы изменяете фактическое shared_ptr
экземпляр в нескольких потоках - у Вас должна будет быть своя собственная защита.
В моем коде, shared_ptr
обычно местные жители или параметры, переданные значением, таким образом, нет никакой проблемы. При получении их от одного потока до другого я обычно использую ориентированную на многопотоковое исполнение очередь.
Конечно, ни одно из этого не обращается к потокобезопасности доступа к объекту, на который указывают shared_ptr
- это также ваше дело.
Add, ваш класс имеет условие Cyclic-references; shared_ptr
не может быть членом CResourceBase
. Вместо этого можно использовать weak_ptr
.