[Rust] Send์ Sync
Send์ Sync๋ Rust๊ฐ ์งํฅํ๋ "์์ ํ ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ"์ ๊ทผ๊ฐ์ ์ด๋ฃจ๋ trait์ด๋ค.
์ฌ์ค Send์ Sync์ ์์คํ ์ ์ผ๋ก ๋๋จํ ๊ธฐ๋ฅ์ ํ๋ ์์๋ ์๋๋ค. ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ ์ฉ๋์ ๋ง์ปค์ผ ๋ฟ์ด๋ค.
์ด 2๊ฐ์ ํธ๋ ์์ด ํน๋ณํ ์ ์ ์๋์ผ๋ก ๊ตฌํ์ด ๋๋ค๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด ์ ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ํ ๊ฒฝ์ฐ, ๋ด๋ถ ํ๋๋ค์ด ์ ๋ถ Send๋ฅผ ๊ตฌํํ๊ณ ์๋ค๋ฉด ๊ทธ ํ์
์ ์๋์ผ๋ก Send๊ฐ ๋๋ค. ํ๋๋ผ๋ Send๋ฅผ ๊ตฌํํ์ง ์๋ ํ์
์ด๋ผ๋ฉด Send๋ฅผ ๊ตฌํํ์ง ์๋๋ค.
Send์ Sync๋ฅผ ์ถฉ์กฑํ์ง ์๋ unsafeํ ํ์ ์ ํฌ์ธํฐ ํ์ ๋ฑ์ด ์๋ค.
Send ํธ๋ ์
Send ํธ๋ ์์ ์ค๋ ๋ ์์ฑ์ ํด๋น ํ์
์ ๊ฐ์ ์์ ํ๊ฒ ์ด๋์ํฌ ์ ์๋์ง๋ฅผ ์๋ฏธํ๋ ํธ๋ ์์ด๋ค.
์๋ฅผ ๋ค๋ฉด, ์ด๋ฐ ์ํฉ์ด๋ค.
move ํด๋ก์ ๋ฅผ ํตํด ํด๋ก์ ๋ฐ์ num ๋ณ์๋ฅผ ์ด๋์์ผ์ ๊ฐ์ ์ฌ์ฉํ๊ณ ์๋ค.
์ด๊ฒ์ num์ ํ์
์ธ i32๊ฐ Send๋ฅผ ๊ตฌํํ๊ณ ์์ด์ ๊ฐ๋ฅํ ์ผ์ด๋ค.
๋ง์ฝ ์๋์ ๊ฐ์ด Send๋ฅผ ์๋ฐํ๋ ํ์
์ ์ ์ํ๋ค๋ฉด
๋ฐ๋ก ์ฝ๋๊ฐ ๊นจ์ง ๊ฒ์ด๋ค.
์ค๋ ๋ ์์ ์ฑ์ด ์ง์ผ์ง์ง ์๋๋ค๊ณ ํ๋ค.
์ด๊ฑธ ํด๊ฒฐํ๋ ๊ฐ์ฅ ๋จ์๋ฌด์ํ ๋ฐฉ๋ฒ์, Send๋ฅผ ๊ฐ์ ๋ก ๊ตฌํ์ํค๋ ๊ฒ์ด๋ค.
์ด ํธ๋ ์ ๊ตฌํ ์์ฒด๊ฐ ์ด๋ค ๊ฒฐ๊ณผ๋ฅผ ๋ณ์์ง ์์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ unsafe๊ฐ ๋ถ๋๋ค.
๊ทธ๋์ ์ด ํ์
์ ๊ตฌํํ๋ ์ฌ๋์ด ๋ฐ๋์ safeํจ์ ๋ณด์ฅํ๋๋ก ๊ตฌํ์ ํด์ผ ํ๋ค.
๋ฌผ๋ก ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์์ ํ๊ฒ Send๊ฐ ๋๋๋ก ๊ตฌํํด๋์ ๊ธฐ์กด ํ์
๋ค์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
๋ํ์ ์ผ๋ก ๋ ํผ๋ฐ์ค ์นด์ดํ
ํ์
์ธ Arc
๋ฐ๋ฉด Rc
Sync ํธ๋ ์
Sync๋ ํด๋น ํ์ ์ด ์ค๋ ๋์ ์์ ํ๊ฒ ์ฐธ์กฐ๋ก ๊ณต์ ๋ ์ ์๋์ง๋ฅผ ๋ปํ๋ ํธ๋ ์์ด๋ค. Send๊ฐ ๊ฐ์ด ์ค๋ ๋๋ก ์ฎ๊ฒจ์ง ์ ์๋์ง๋ฅผ ์๋ฏธํ๋ค๋ฉด, Sync๋ ์ฌ๋ฌ ์ค๋ ๋์์ ๋์์ ๊ณต์ ๋ ์ฑ๋ก ์ฌ์ฉํ ์ ์๋์ง๋ฅผ ์๋ฏธํ๋ค.
์กฐ๊ธ ํท๊ฐ๋ฆด ์๋ ์๋๋ฐ, Arc ๊ฐ์ ํ์ ์ Sync๋ฅผ ๊ตฌํํ์ง ์๋ ํ์ ์ ๋ฃ์ด๋ณด๋ฉด ์ด๊ฒ ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง ์ ์ ์๋ค. Cell์ Send๋ฅผ ๊ตฌํํ์ง๋ง Sync๋ ๊ตฌํํ์ง ์๋ ๋ํ์ ์ธ ํ์ ์ด๋ค.

Cell์ด Sync๋ฅผ ๊ตฌํํ์ง ์๋๋ค๊ณ ๋ถํ์ ๋ด๋ฑ๋๋ค.
Arc๋ ์ผ๋ง๋ ์ง clone์ ํตํด ๋ณต์ ๋ ์ ์๋๋ฐ ๋ฐํด, ์ ์ Cell์ด ๋ณต์ ๋ ์ํ์์์ thread safetyํ ๋์์ ๋ณด์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ (Sync๋ฅผ ๊ตฌํํ์ง ์๊ธฐ ๋๋ฌธ์) ๊ฒฝ๊ณ ๋ฅผ ๋ด๋ฑ๋ ์
์ธ ๊ฒ์ด๋ค.
Rust๋ ์ด๋ฌํ ์ ์ฝ์ ํตํด thread์ ์์ ํ ํ์ ๊ณผ ์์ ํ์ง ์์ ํ์ ์ ๋ถ๋ฅํ๊ณ thread safety๋ฅผ ๋ณด์ฅํ๋ค.
Send Sync ๊ฐ์ ๋ก ์์ ๊ธฐ
ํํ ์ํฉ์ ์๋๊ฒ ์ง๋ง, Send๋ Sync๋ฅผ ๊ตฌํํ์ง ์๊ฒ ๋ง๋ค ์๋ ์๋ค.
๊ฐ์ฅ ๊ฐํธํ ๋ฐฉ๋ฒ์ ๋น์ทํ ๋ง์ปค ํ์
์ธ ํฌํ
๋ฐ์ดํฐ๋ก ์์ ํ์ง ์์ ํ์
์ ๊ตฌ๊ฒจ๋ฃ๋ ๊ฒ์ด๋ค.
์ด๋ฌ๋ฉด Send์ Sync์ ๋ํ ์๋ ๊ตฌํ์ด ๋งํ๋ฒ๋ฆฌ๊ณ
์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์ฐธ์กฐ
https://doc.rust-lang.org/nomicon/send-and-sync.html
https://stackoverflow.com/questions/59428096/understanding-the-send-trait