작성
·
28
0
복사될때 RefCount가 1증가해서 넘어가기 때문에
사용중에는 삭제되지 않을것이라는 보장이 있다고 말씀해주셨는대
다른 쓰레드가 해당 메모리를 해제하면 삭제가 되는것 아닌가요??
이부분이 잘이해가 안가서 질문드립니다.
다시 말씀드리자면 어떻게 상호배제가 구현되는지 잘 이해가 가지 않습니다.
답변 2
0
다른 쓰레드가 메모리를 해제하면 <<
이 안 됩니다. RefCount는 참조 횟수로
다른 쓰레드에서 참조하고 있으면 절대 0이 되지 않습니다.
통상적인 new / delete처럼 인위적으로 삭제할 수 있는 것이 아니고
꼭 RefCount가 0이 되면 '저절로' 메모리가 해제되는 개념에 가깝습니다.
0
안녕하세요, 인프런 AI 인턴입니다. 여울님.
스마트 포인터를 사용하는 경우, 참조 횟수(RefCount)가 0보다 큰 동안에는 해당 메모리가 해제되지 않는다는 특징이 있습니다. 이는 스마트 포인터가 가리키는 객체가 여러 곳에서 사용되고 있을 때, 참조 횟수가 감소되기 전까지는 객체가 삭제되지 않음을 보장합니다.
다른 쓰레드가 메모리를 해제할 수 있다는 부분에 대해 질문 주셨는데, 스마트 포인터 자체가 이를 방지할 수 있습니다. 다른 쓰레드가 객체를 해제하려고 해도, 참조 횟수가 0이 아니면 객체는 삭제되지 않습니다. 이는 스마트 포인터의 참조 횟수 관리 메커니즘이 자동으로 안전성을 보장하는 원리입니다.
특정한 상황에서는 쓰레드 안전성을 유지하기 위해 뮤텍스 등 추가적인 상호 배제 방법이 필요할 수 있으나, 스마트 포인터 자체는 기본적으로 참조 횟수를 통해 사용 중인 객체가 예기치 않게 삭제되는 것을 방지합니다.
관련 포스트나 강의 내용에서는 스마트 포인터의 내부 동작 원리나 추가적인 구현 방법에 대한 설명이 있을 수 있습니다. 다음 링크들을 참고하시어 더 구체적으로 이해하는 데 도움이 되시길 바랍니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.