์˜ˆ์ œ

Send + Sync

์—ฌ๋Ÿฌ๋ถ„์ด ๋‹ค๋ฃจ๊ฒŒ ๋  ๋Œ€๋ถ€๋ถ„์˜ ํƒ€์ž…์€ Send + Sync์ž…๋‹ˆ๋‹ค:

  • i8, f32, bool, char, &str, โ€ฆ
  • (T1, T2), [T; N], &[T], struct { x: T }, โ€ฆ
  • String, Option<T>, Vec<T>, Box<T>, โ€ฆ
  • Arc<T>: ์ฐธ์กฐ ์นด์šดํŠธ ์กฐ์ž‘์„ ์•„ํ† ๋ฏน ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šค๋ ˆ๋“œ ์•ˆ์ „ํ•จ.
  • Mutex<T>: ๊ฐ’์„ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ๋ฎคํƒ์Šค๋ฅผ ์ž ๊ถˆ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šค๋ ˆ๋“œ ์•ˆ์ „ํ•จ.
  • AtomicBool, AtomicU8, โ€ฆ: ๊ฐ’์„ ์ ‘๊ทผํ•  ๋•Œ ํŠน๋ณ„ํ•œ ์•„ํ† ๋ฏน ๋ช…๋ น์–ด๋“ค์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ œ๋„ค๋ฆญ ํƒ€์ž…์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํƒ€์ž… ํŒŒ๋ผ๋ฉ”ํ„ฐ๊ฐ€ Send + Sync์ด๋ฉด Send + Sync ์ž…๋‹ˆ๋‹ค.

Send + !Sync

์•„๋ž˜ ํƒ€์ž…๋“ค์€ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋กœ ์ด๋™๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์Šค๋ ˆ๋“œ ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค:

  • mpsc::Sender<T>
  • mpsc::Receiver<T>
  • Cell<T>
  • RefCell<T>

!Send + Sync

์•„๋ž˜ ํƒ€์ž…๋“ค์€ ์Šค๋ ˆ๋“œ ์•ˆ์ „ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋กœ ์ด๋™๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค:

  • MutexGuard<T: Sync>: Uses OS level primitives which must be deallocated on the thread which created them.

!Send + !Sync

์•„๋ž˜ ํƒ€์ž…๋“ค์€ ์Šค๋ ˆ๋“œ ์•ˆ์ „ํ•˜์ง€๋„ ์•Š๊ณ  ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋กœ ์ด๋™๋  ์ˆ˜๋„ ์—†์Šต๋‹ˆ๋‹ค:

  • Rc<T>: Rc<T> ๋Š” ์•„ํ† ๋ฏนํ•˜์ง€ ์•Š์€ ๋ฐฉ์‹์œผ๋กœ ์ฐธ์กฐ ์นด์šดํŠธ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” RcBox<T>๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.
  • *const T, *mut T: ๋Ÿฌ์ŠคํŠธ๋Š” ํฌ์ธํ„ฐ๊ฐ€ ์Šค๋ ˆ๋“œ ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.