Race Condition

Race Condition (๊ฒฝ์Ÿ ์ƒํƒœ) ์ด๋ž€?

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

  • Race์˜ ๋œป ๊ทธ๋Œ€๋กœ, ๋‘๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ์ž์›์„ ๋†“๊ณ  ์„œ๋กœ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ๊ฒฝ์Ÿํ•˜๋Š” ์ƒํ™ฉ์„ ๋งํ•œ๋‹ค.

Race Condition ์˜ˆ์‹œ

  • ์ƒ์‚ฐ์ž - ์†Œ๋น„์ž ๋ชจ๋ธ

image

์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด A์™€ B ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ™์€ ๋ฒ„ํผ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ์ด๊ณ , A๋Š” ๊ณต์œ ํ•˜๊ณ  ์žˆ๋Š” ๋ฒ„ํผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฑ„์›Œ ๋„ฃ๊ณ , B๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ๊ฐ„๋‹ค. ( ๋ฒ„ํผ๊ฐ€ ๊ฐ€๋“ ์ฐจ์žˆ์œผ๋ฉด A๋Š” ๋นˆ ๊ณต๊ฐ„์ด ์ƒ๊ธธ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜๊ณ , ๋ฒ„ํผ๊ฐ€ ํ…… ๋น„์–ด์žˆ์œผ๋ฉด B๋Š” A๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ค„ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•œ๋‹ค. )

์—ฌ๊ธฐ์„œ ๋‘ ํ”„๋กœ์„ธ์Šค๋Š” counter๋ผ๋Š” intํ˜• ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•ด ๋ฒ„ํผ์— ์–ผ๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํŒŒ์•…ํ•œ๋‹ค.  
์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ A๋Š” counter++, B๋Š” counter-- ์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.  

- ์˜ˆ์ƒ๋Œ€๋กœ A๊ฐ€ ๋จผ์ € ๋ฐ์ดํ„ฐ๋ฅผ ์ฑ„์›Œ๋„ฃ๊ณ , B๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ๊ฐ€๋Š” ๊ฒฝ์šฐ 
โ†’ counter ๊ฐ’ ์œ ์ง€  

- ํ•˜์ง€๋งŒ A๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  ๋ฐ”๋กœ ์งํ›„ B๊ฐ€ ์‹คํ–‰๋˜์–ด, A์˜ ์—ฐ์‚ฐ์ด ๋๋‚˜๊ธฐ ์ „์— B๊ฐ€ ์‹คํ–‰๋˜์–ด๋ฒ„๋ฆฌ๋Š” ๊ฒฝ์šฐ 
โ†’ A์™€ B์˜ counter ๊ฐ’์ด ์„œ๋กœ ๋‹ฌ๋ผ ์‹œ์Šคํ…œ์— ์˜ค๋ฅ˜ ๋ฐœ์ƒ

์ด์ฒ˜๋Ÿผ ๊ณต์šฉ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ ‘๊ทผ ์ˆœ์„œ์— ๋”ฐ๋ผ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ๋™์ผํ•˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ด Race Condition์ด๋‹ค.

๋ฐœ์ƒ ํ™˜๊ฒฝ

1. ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค / ์Šค๋ ˆ๋“œ

  • ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค ํ™˜๊ฒฝ์—์„œ 2๊ฐœ์˜ PCU๊ฐ€ ๋™์‹œ์— ์ปค๋„ ๋‚ด๋ถ€์˜ ๊ณต์œ  ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜์—ฌ ์กฐ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ

  • ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๊ณตํ†ต ์ž์›์„ ๋ณ‘ํ–‰ํ•˜์—ฌ ์ž‘์—…ํ•  ๋•Œ

โ†’ ํ•ด๊ฒฐ๋ฒ• : ์ปค๋„ ๋‚ด๋ถ€์— ์žˆ๋Š” ๊ฐ ๊ณต์œ  ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ๋•Œ๋งˆ๋‹ค, ๊ทธ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ lock/unlock์„ ํ•œ๋‹ค.

2. ์ปค๋„ ์ž‘์—…

  • ์ปค๋„ ๋ชจ๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋‹ค๊ฐ€ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ

โ†’ ํ•ด๊ฒฐ๋ฒ• : ์ปค๋„๋ชจ๋“œ์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ, ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ disable ์‹œ์ผœ CPU ์ œ์–ด๊ถŒ์„ ๊ฐ€์ ธ๊ฐ€์ง€ ๋ชปํ•˜๋„๋ก ํ•œ๋‹ค.

3. ํ”„๋กœ์„ธ์Šค์˜ ์‹œ์Šคํ…œ์ฝœ

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์Šคํ…œ์ฝœ์„ ํ•˜์—ฌ ์ปค๋„๋ชจ๋“œ๋กœ ์ง„์ž…ํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋„์ค‘ ๋ฌธ๋งฅ ๊ตํ™˜์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ์ค‘, ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜์–ด CPU ์ œ์–ด๊ถŒ์ด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ๋„˜์–ด๊ฐ€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ

โ†’ ํ•ด๊ฒฐ๋ฒ• : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ปค๋„๋ชจ๋“œ์—์„œ ์ž‘์—…์„ ํ•˜๋Š” ๊ฒฝ์šฐ ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜์–ด๋„ CPU ์ œ์–ด๊ถŒ์„ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋„˜๊ฒจ์ฃผ์ง€ ๋ชปํ•˜๋„๋ก ํ•œ๋‹ค.

Last updated