프로그래밍/c++
shared_ptr의 래퍼런스 카운팅은 스레드 세이프 한가? 정말?
제페
2018. 4. 22. 13:23
반응형
// CLASS _Ref_count_base
class _Ref_count_base
{// common code for reference counting
private:
virtual void _Destroy() _NOEXCEPT = 0;
virtual void _Delete_this() _NOEXCEPT = 0;
_Atomic_counter_t _Uses;
_Atomic_counter_t _Weaks;
// ....
long _Use_count() const _NOEXCEPT
{// return use count
return (_Get_atomic_count(_Uses));
}
스레드 세이프 하다.
여기에서 스레드 세이프 하다는 건 감싸진 오브젝트가 아닌 래퍼런스 카운터를 관장하는, 컨트롤 블록이 스레드 세이프 하다는 것이다.
종종 스레드 세이프 하지 않다는 얘기가 들리는 건 shared_ptr로 오브젝트를 감싼다고 그 오브젝트가 스레드 세이프 해지지 않는다는 걸 의미한 것을 잘못 이해했다던가,
shared_ptr이 표준에 들어오기 이전(c++11 이전), 스마트 포인터 구현이 제각각일 때 사용 경험이 있는 사람이 그런 말을 할 수 있었을 가능성이 있다.
반응형