Thread Safety๋ž€?

๊ทธ๋ƒฅ ์ค€ํ˜„ยท2024๋…„ 8์›” 19์ผ
0

Computer Science

๋ชฉ๋ก ๋ณด๊ธฐ
14/16

๐Ÿ’ก ์ด ๊ธ€์€ ํšŒ์‚ฌ ์ธํ„ด ๊ธฐ๊ฐ„์— ์Šคํ„ฐ๋””ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค!

1. ๊ฐœ๋…

์—ฌ๋Ÿฌ ๋ธ”๋กœ๊ทธ์— ์ •๋ฆฌ๋œ Race Condition์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๋‚˜์—๊ฒ ์ถ”์ƒ์ ์œผ๋กœ ๋Š๊ปด์กŒ๋‹ค.
๊ณ ๋ฏผ ๋์— ๋‚ด๊ฐ€ ๋‚ด๋ฆฐ Thread Safety์˜ ์ •์˜๋Š” ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ์ด์ƒ ๋™์ž‘์„ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.

๊ฐœ๋ฐœ์„ ํ•  ๋•Œ ์ด์ƒ ๋™์ž‘์„ ํ•˜์ง€ ์•Š๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๊ฒƒ์€ ๋‹น์—ฐํ•˜๋‹ค.
์ด ๋‹น์—ฐํ•œ ๊ฒƒ ๋•Œ๋ฌธ์— Thread Safety๋ผ๋Š” ๋‹จ์–ด๊นŒ์ง€ ๋งŒ๋“  ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ?

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š” ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ๋งŒ๋‚œ ์„ ๋ฐฐ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ค‘์š”์„ฑ์„ ๊ฐ•์กฐํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  ๊ฒƒ์ด ์•„๋‹๊นŒ ์ƒ๊ฐํ–ˆ๋‹ค.

2. ๋ฌธ์ œ ๋ฐ ํ•ด๊ฒฐ๋ฐฉ์•ˆ

2.1 Race Condition

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ์ž์›์— ์ ‘๊ทผํ•  ๋•Œ, ์‹คํ–‰ ์ˆœ์„œ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ๋ฌธ์ œ ์ƒํ™ฉ์ด๋‹ค.
์ด๋Ÿฐ ์ƒํ™ฉ์„ '๊ฒฝํ•ฉ ์ƒํƒœ'์— ๋น ์กŒ๋‹ค๊ณ  ๋ถ€๋ฅธ๋‹ค.
๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ์ž์›์„ ๋‘๊ณ  Raceํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ํ•ด์„œ ๋ถ™์—ฌ์ง„ ์ด๋ฆ„์ด๋‹ค.

์–ด๋–ป๊ฒŒ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„๊นŒ?

2.1.1 Mutex

ํ•ด๊ฒฐ ๋ฐฉ์•ˆ ์ค‘ ํ•˜๋‚˜๋Š” Mutex๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
Mutex๋Š” Lock์ด๋ผ๋Š” ๊ฐœ๋…์„ ์‚ฌ์šฉํ•œ๋‹ค.
๊ฐ ์Šค๋ ˆ๋“œ๋Š” ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜๊ธฐ ์ „์— Lock์„ ๊ฑธ์–ด์•ผ ํ•œ๋‹ค.
Lock์ด ๊ฑธ๋ฆฐ ๊ณต์œ  ์ž์›์€ ํ•ด๋‹น ์Šค๋ ˆ๋“œ๊ฐ€ ์ž‘์—…์„ ๋๋‚ด๊ณ  Lock์„ ํ’€๊ธฐ ์ „๊นŒ์ง€ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.
๋จผ์ € ์ ‘๊ทผํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ Lock์„ ๊ฑฐ๋Š” ์ƒํ™ฉ์„ ๊ณต์œ  ์ž์›์„ ์ ์œ ํ–ˆ๋‹ค๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋Š” ๋จผ์ € Lock์„ ์ˆ˜ํ–‰ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž‘์—…์„ ๋๋‚ผ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ Lock์ด ํ•ด์ œ๋˜๋ฉด ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
๊ณต์œ  ์ž์›์— ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ์ ‘๊ทผํ•˜๋„๋ก ์ œ์–ดํ•ด Race Condition ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด Mutex๋งŒ ์“ฐ๋ฉด Thread Safety๋Š” ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์„๊นŒ?

2.2 Deadlock

Mutex๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ๋“œ๋ฝ(Deadlock) ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

A์™€ B, 2๊ฐœ์˜ ๊ณต์œ  ์ž์›์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.
2๊ฐœ์˜ ๊ณต์œ  ์ž์›์— ๋ชจ๋‘ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์„ ํ•˜๋Š” ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ์žˆ๋‹ค.
ํ•œ ์Šค๋ ˆ๋“œ๋Š” ๊ณต์œ  ์ž์›A์— ์ ‘๊ทผํ•œ ์ƒํƒœ์—์„œ, ๊ณต์œ  ์ž์›B์— ์ ‘๊ทผํ•˜๊ณ ์ž ํ•œ๋‹ค.
๋˜ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋Š” ๊ณต์œ  ์ž์› B์— ์ ‘๊ทผํ•œ ์ƒํƒœ์—์„œ, ๊ณต์œ  ์ž์›A์— ์ ‘๊ทผํ•˜๊ณ ์ž ํ•œ๋‹ค.

๊ฐ ์Šค๋ ˆ๋“œ๋Š” 2๋ฒˆ์งธ ์ ‘๊ทผํ•˜๋ ค๋Š” ๊ณต์œ  ์ž์›์— Lock์ด ๊ฑธ๋ ค์žˆ๊ธฐ ๋•Œ๋ฌธ์— Lock์ด ํ’€๋ฆด ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค.
๋‘ ์Šค๋ ˆ๋“œ๋Š” ํ•˜๋‚˜์˜ ์ž์›์„ ์ ์œ ํ•˜๊ณ  ๋ฐ˜๋Œ€ํŽธ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉด์„œ ๋ฌดํ•œ์ • ๋Œ€๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค.

๋ฐ๋“œ๋ฝ์€ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„๊นŒ?

2.2.1 ์ž์› ํ•ด์ œ

2๋ฒˆ์งธ ๊ณต์œ  ์ž์›์— ์ ‘๊ทผ์„ ์‹คํŒจํ–ˆ์„ ๋•Œ, 1๋ฒˆ์งธ ๊ณต์œ  ์ž์›์— Lock์„ ํ•ด์ œํ•œ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ๊ธฐ๋‹ค๋ฆฌ๋˜ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž‘์—…์„ ๋งˆ๋ฌด๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ณ , ์ž์‹ ์€ ๋‹ค์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

์ด์ œ ์ •๋ง Thread Safety๊ฐ€ ์ง€์ผœ์กŒ์„๊นŒ?

2.3 Livelock

์ž์›์„ ํ•ด์ œํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด๋„ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์ด์ƒ ๋™์ž‘์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ผ์ด๋ธŒ๋ฝ(Livelock)์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์ƒํ™ฉ์ด๋‹ค.

์•ž์—์„œ ์„ค๋ช…ํ•œ ๋ฐฉ๋ฒ•๋Œ€๋กœ ์ ‘๊ทผํ•˜๋ ค๋Š” ๊ณต์œ  ์ž์›์— Lock์ด ๊ฑธ๋ ค ์žˆ๋Š” ๊ฒฝ์šฐ, ๋จผ์ € ์ ์œ ํ•˜๊ณ  ์žˆ๋˜ ๊ณต์œ  ์ž์›์„ ํ•ด์ œํ•˜๊ฒŒ๋” ์Šค๋ ˆ๋“œ ๋™์ž‘์„ ๊ตฌํ˜„ํ•ด๋†“์•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

๋งŒ์•ฝ ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ๋™์ž‘ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

๊ฐ ์Šค๋ ˆ๋“œ๋Š” ์ฒซ๋ฒˆ์งธ ๊ณต์œ  ์ž์›์„ ์ ์œ ํ•˜๊ณ  ๋‘๋ฒˆ์งธ ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•œ๋‹ค.
ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ๋‘๋ฒˆ์งธ ๊ณต์œ  ์ž์›์„ ์ด๋ฏธ ์ ์œ ํ•˜๊ณ  ์žˆ์–ด์„œ ์ฒซ๋ฒˆ์งธ ๊ณต์œ  ์ž์›์˜ Lock์„ ํ•ด์ œํ•˜๊ณ  ์ž‘์—…์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด ์ƒํ™ฉ์ด ๋ฐ˜๋ณต๋œ๋‹ค.

๋‘ ์Šค๋ ˆ๋“œ๋Š” ์—ด์‹ฌํžˆ ๊ณต์œ  ์ž์›์„ Lock์„ ๊ฑธ์—ˆ๋‹ค๊ฐ€ ํ•ด์ œํ–ˆ๋‹ค๊ฐ€ ํ•˜์ง€๋งŒ ์ •์ž‘ ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋œ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๋˜ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•ด์•ผ ๋ ๊นŒ?

2.3.1 ์Šค๋ ˆ๋“œ์— ์šฐ์„  ์ˆœ์œ„ ๋ถ€์—ฌ

๊ฐ ์Šค๋ ˆ๋“œ์— ์šฐ์„  ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•ด๋ณด์ž.
๊ฐ ์Šค๋ ˆ๋“œ ์ž‘์—…์— ๋”ฐ๋ผ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•ด์„œ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋†’์€ ์Šค๋ ˆ๋“œ๋Š” ๋‚ฎ์€ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ์œ ํ•œ ๊ณต์œ  ์ž์›์„ ํ•ด์ œํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ณ , ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ์Šค๋ ˆ๋“œ๋Š” ์ฆ‰์‹œ ๊ณต์œ  ์ž์›์„ ํ•ด์ œํ•˜๊ฒŒ๋” ํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

์ด์ œ ์ •๋ง Thread Safeํ• ๊นŒ?

2.4 Starvation

ํ•œ๊ธ€๋กœ ๋ฒˆ์—ญํ•˜๋ฉด '๊ธฐ์•„', '๊ตถ์ฃผ๋ฆผ'์ด๋‹ค.
์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ์Šค๋ ˆ๋“œ๊ฐ€ ๋‹ค๋ฅธ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋†’์€ ์Šค๋ ˆ๋“œ์— ๊ณ„์† ๋ฐ€๋ ค์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

3. ๊ฒฐ๋ก 

Mutex๋ฅผ ์ด์šฉํ•ด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์˜ Thread Safety๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์„ ๊ณต๋ถ€ํ–ˆ๋‹ค.
Mutex๋ฅผ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•์€ Thread Safety๋ฅผ ์ง€ํ‚ค๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ํ•ด๊ฒฐ์ฑ…์ด์ง€๋งŒ ์™„๋ฒฝํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Œ์„ ํ™•์ธํ–ˆ๋‹ค.
์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ ํ”„๋กœ๊ทธ๋žจ์˜ ํŠน์ง•์„ ๊ณ ๋ คํ•ด ์–ด๋–ค ์‹์œผ๋กœ ์Šค๋ ˆ๋“œ ๋™์ž‘์„ ๊ตฌํ˜„ํ•ด์•ผ ์•ˆ์ „ํ•  ์ง€ ๊นŠ์€ ๊ณ ๋ฏผ์ด ํ•„์š”ํ•ด๋ณด์ธ๋‹ค.

๋‹ค์Œ ๊ธ€์—์„œ๋Š” Thread Safety๋ฅผ ์ง€ํ‚ค๊ธฐ ์œ„ํ•œ ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ธ ThreadLocal์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•ด๋ณด์ž.

profile
์ž˜ํ•ด์•ผ ์žฌ๋ฐŒ์–ด

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด