[Rust] Lock Poison ๋ฌธ์ œ

Lock Poison์€ Rust์—์„œ ํ‘œ์ค€ mutex๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์žˆ์–ด์„œ ์ฃผ์˜ํ•  ์  ์ค‘ ํ•˜๋‚˜๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ mutex๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.
mutex๋กœ ์นด์šดํ„ฐ ๊ฐ’์„ ๋‘๊ณ , ๋ณ„๋„ ์Šค๋ ˆ๋“œ์—์„œ 1 ์ฆ๊ฐ€, ๋ฉ”์ธ์Šค๋ ˆ๋“œ์—์„œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๋‹น์žฅ ๋ณด๊ธฐ์— ๋ณ„๋กœ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ๋Š” ์•„๋‹ˆ๋‹ค.
์กฐ๊ธˆ ๊ฑฐ์Šฌ๋ฆฌ๋Š” ์ ์€ unwrap()์ด ์ข€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

Rust์˜ Mutex::lock() ํ•จ์ˆ˜๋Š” ์™œ ํ•ญ์ƒ Result๋กœ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ• ๊นŒ? ์›์ž์ ์ธ ๋ช…๋ น์ธ๋ฐ ์‹คํŒจํ•  ์ด์œ ๊ฐ€ ์žˆ๋‚˜?
์‚ฌ์‹ค ์ด๋Š” ์Šค๋ ˆ๋“œ ๋‹จ์œ„์˜ ํŒจ๋‹‰ ๋ฐœ์ƒ์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•œ ๋ถ€๋ถ„์ด๋‹ค.




์Šค๋ ˆ๋“œ์™€ ํŒจ๋‹‰

Rust์—์„œ ํŒจ๋‹‰์€ ์Šค๋ ˆ๋“œ ๋‹จ์œ„์—์„œ ๋…๋ฆฝ์ ์ด๋‹ค.
๋‹ค์‹œ ๋งํ•ด์„œ, ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ํŒจ๋‹‰์œผ๋กœ ํ„ฐ์ง€๋”๋ผ๋„, ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์— ์˜ํ–ฅ์„ ์ฃผ์ง€๋Š” ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ ๋ฉ”์ธ์Šค๋ ˆ๋“œ์—์„œ ํŒจ๋‹‰์„ ํ„ฐ๋œจ๋ฆฌ๋ฉด ๋‹น์žฅ ํ”„๋กœ๊ทธ๋žจ์ด ๋๋‚˜์ง€๋งŒ, ๋ณ„๋„ ์Šค๋ ˆ๋“œ์—์„œ ํŒจ๋‹‰์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์—๋Š” ํŒจ๋‹‰ trace๋งŒ ๋œจ๊ณ  ํ”„๋กœ๊ทธ๋žจ์ด ์ฃฝ์ง€๋Š” ์•Š๋Š”๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๋Š”... ํŒจ๋‹‰์ด ๋ฐœ์ƒํ•œ ์Šค๋ ˆ๋“œ์—์„œ ๊ฐ€๊ณตํ•œ mutex์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ๋ฏฟ์„ ์ˆ˜ ์žˆ๋ƒ๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—, mutex ๊ฐ€๋“œ๊ฐ€ ์‚ด์•„์žˆ๋Š” ์ƒํƒœ์—์„œ ํŒจ๋‹‰์ด ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น mutex๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
์ด๋ฅผ Lock Poison์ด๋ผ๊ณ  ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ์ž˜ ๋Œ๋˜ ๋ฉ”์ธ์Šค๋ ˆ๋“œ์—์„œ์˜ lock().unwrap()์ด ํŒจ๋‹‰์„ ๋˜์งˆ ๊ฒƒ์ด๋‹ค.





Poison ํšŒ๋ณตํ•˜๊ธฐ

์ผ๋‹จ, poison์ด ๋ฐœ์ƒํ•œ ์ƒํƒœ์˜ mutex์—์„œ ๊ฐ’์„ ์ฝ์–ด์˜ค๋Š” ๊ฒƒ์€ ์–ด๋ ต์ง€ ์•Š๋‹ค.
์˜ค๋ฅ˜ ๊ฐ์ฒด์— ๊ฐ’์ด ๋“ค์–ด์žˆ๋‹ค.

๋‹ค๋งŒ ์ด๋Œ€๋กœ๋Š” ์‚ฌ์šฉ์ด ์ข€ ๋ถˆํŽธํ•œ ๊ฒƒ์ด ์‚ฌ์‹ค์ด๋‹ค.
์˜ค๋ฅ˜ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ ๊ฐ’์„ ์ฝ์–ด์˜ฌ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ poison ์ƒํƒœ๋Š” ๊ณ„์†ํ•ด์„œ ์œ ์ง€๋œ๋‹ค.

ํ•˜์ง€๋งŒ unstable ๊ธฐ๋Šฅ์„ ์ด์šฉํ•œ๋‹ค๋ฉด poison ์ƒํƒœ๋ฅผ ํ•ด์ œํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅ์€ ํ•˜๋‹ค.
ํ”Œ๋ž˜๊ทธ ์—ด๊ณ 

#![feature(mutex_unpoison)]

clear_poison์œผ๋กœ poison ์ƒํƒœ๋ฅผ ํ•ด์ œํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿผ ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ์ •์ƒ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ lock ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด์งˆ ๊ฒƒ์ด๋‹ค.

๋นจ๋ฆฌ ์•ˆ์ •ํ™”๊ฐ€ ๋์œผ๋ฉด ํ•˜๋Š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋‹ค.




์„œ๋“œํŒŒํ‹ฐ: tokio์˜ ๊ฒฝ์šฐ

tokio Mutex์˜ ๊ฒฝ์šฐ์—๋Š” poisoning์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ๋”ฐ๋กœ ๊ตฌํ˜„๋˜์–ด์žˆ์ง€๋Š” ์•Š๋‹ค.

๊ทธ๋ž˜์„œ ์Šค๋ ˆ๋“œ์—์„œ ํŒจ๋‹‰์ด ๋œจ๋”๋ผ๋„

์‹คํ–‰์€ ์ž˜ ๋œ๋‹ค.



์ฐธ์กฐ
https://users.rust-lang.org/t/mutex-poisoning-why-and-how-to-recover/72192/17
https://doc.rust-lang.org/nomicon/poisoning.html
https://doc.rust-lang.org/std/sync/struct.Mutex.html