Rc
Rc
๋ ์ฐธ์กฐ ์นด์ดํ
๊ณต์ ํฌ์ธํฐ์
๋๋ค. ์ฌ๋ฌ ์์น์์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํด์ผํ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค:
- ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์์
ํ๋ ๊ฒฝ์ฐ
Arc
์Mutex
๋ฅผ ์ฐธ์กฐํ์ธ์. - drop ๊ฐ๋ฅํ ์ํ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ๊ณต์ ํฌ์ธํฐ๋ฅผ
Weak
ํฌ์ธํฐ๋ก _๋ค์ด๊ทธ๋ ์ด๋_ํ ์๋ ์์ต๋๋ค.
Speaker Notes
Rc
๋ ์ฐธ์กฐ ์นด์ดํธ๋ฅผ ํตํด ์ฐธ์กฐ๊ฐ ์๋ ๋์์Rc
๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ๊ฐ์ด ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋์ง ์์์ ๋ณด์ฅํฉ๋๋ค.- C++์
std::shared_ptr
์ ์ ์ฌํฉ๋๋ค. clone
์ ๋น์ฉ์ด ๊ฑฐ์ ๋ค์ง ์์ต๋๋ค. ๊ฐ์ ๊ณณ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ํ๋ ๋ ๋ง๋ค๊ณ , ์ฐธ์กฐ ์นด์ดํธ๋ฅผ ๋๋ฆฝ๋๋ค. ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ ์์ฒด๊ฐ ๋ณต์ (๊น์ ๋ณต์ )๋์ง๋ ์์ผ๋ฉฐ, ๊ทธ๋์ ์ฝ๋์์ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ์๋์ง ๊ฒํ ํ ๋ ์ผ๋ฐ์ ์ผ๋กRc
๋ฅผclone
ํ๋ ๊ฒ์ ๋ฌด์ํ ์ ์์ต๋๋ค.make_mut
๋ ์ค์ ๋ก ํ์ํ ๊ฒฝ์ฐ์ ๋ด๋ถ ๊ฐ์ ๋ณต์ ํ๊ณ (โclone-on-writeโ) ๊ฐ๋ณ ์ฐธ์กฐ๋ฅผ ๋ฐํํฉ๋๋ค.- ์ฐธ์กฐ ์นด์ดํธ๋ฅผ ํ์ธํ๋ ค๋ฉด
Rc::strong_count
๋ฅผ ์ฌ์ฉํ์ธ์. Rc
๋downgrade()
๋ก ๋ค์ด๊ทธ๋ ์ด๋ํ์ฌ ์ฝํ๊ฒ ์ฐธ์กฐ ์นด์ดํธ๋๋(weekly reference-counted) ๊ฐ์ฒด๊ฐ ๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ํ๊ตฌ์กฐ๋ผ ํ๋๋ผ๋ drop์ด ๊ฐ๋ฅํฉ๋๋ค. (์๋ง๋RefCell
์ ํจ๊ป ์ฌ์ฉํด์ผ ํ ๊ฒ์ ๋๋ค.)