๊ด€๋ฆฌ ๋ฉ”๋‰ด

Tech Log ๐Ÿ› ๏ธ

๋ชจ๋‹ˆํ„ฐ์˜ ๋™์ž‘ ๋ฐฉ์‹๊ณผ ์ž๋ฐ”์—์„œ์˜ ๋ชจ๋‹ˆํ„ฐ ๋ณธ๋ฌธ

Computer Science/์šด์˜์ฒด์ œ

๋ชจ๋‹ˆํ„ฐ์˜ ๋™์ž‘ ๋ฐฉ์‹๊ณผ ์ž๋ฐ”์—์„œ์˜ ๋ชจ๋‹ˆํ„ฐ

sehaan 2023. 12. 30. 23:07

๋ชจ๋‹ˆํ„ฐ๋ž€?

๋ชจ๋‹ˆํ„ฐ๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ mutex๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค.

์กฐ๊ฑด์— ๋”ฐ๋ผ์„œ ์Šค๋ ˆ๋“œ๋ฅผ waiting ์ƒํƒœ๋กœ ์ „ํ™˜์‹œํ‚ค๋Š”๋ฐ ์ด๋ฅผ cooperation์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

mutex - ๋ฝ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์Šค๋ ˆ๋“œ๋งŒ์ด ์ž„๊ณ„ ์˜์—ญ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ณ  ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ชจ๋‹ˆํ„ฐ์˜ ์ž‘๋™ ๋ฐฉ์‹

๋ชจ๋‹ˆํ„ฐ๋Š” ํฌ๊ฒŒ ๋‘๊ฐ€์ง€์˜ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

 

๋ฎคํ…์Šค

mutual exclusion์„ ๋ณด์žฅํ•˜๋Š” ์žฅ์น˜์ด๋‹ค. ๋ฝ์„ ๊ฐ€์ง€์ง€ ๋ชปํ•œ ์Šค๋ ˆ๋“œ๋Š” ๋ฎคํ…์Šค์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์—”ํŠธ๋ฆฌ ํ์— ๋“ค์–ด๊ฐ„๋‹ค.

condition variable

wating queue๋ฅผ ์ด์šฉํ•ด ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜์ง€ ์•Š์€ ์Šค๋ ˆ๋“œ๋“ค์ด ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ๋จธ๋ฌผ ์ˆ˜ ์žˆ๋„๋กํ•œ๋‹ค.

๋งŒ์•ฝ ์Šค๋ ˆ๋“œ์˜ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜์—ˆ์„ ๊ฒฝ์šฐ ์Šค๋ ˆ๋“œ๋ฅผ ๊นจ์šฐ๋Š” ์ž‘์—…์ด ํ•„์š”ํ•œ๋ฐ ์ด๋Ÿฌํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ์ธํ•ด 3๊ฐœ์˜ ๋™์ž‘(์ƒํƒœ)๋ฅผ ๊ฐ€์ง„๋‹ค.

 

1. wait - ์Šค๋ ˆ๋“œ๊ฐ€ ์ž์‹ ์„ cv(condition variable)์˜ waiting ํ์— ๋„ฃ๊ณ  ๋Œ€๊ธฐ(wait) ์ƒํƒœ๋กœ ์ „ํ™˜ํ•œ๋‹ค.

2. signal - wating ํ์—์„œ ๋Œ€๊ธฐ ์ค‘์ธ ์Šค๋ ˆ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊นจ์šด๋‹ค. 

3. broadcast - wating ํ์—์„œ ๋Œ€๊ธฐ ์ค‘์ธ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋ฅผ ๊นจ์šด๋‹ค.

 

๋ชจ๋‹ˆํ„ฐ์—๋Š” ๋‘ ๊ฐœ์˜ ํ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

์—”ํŠธ๋ฆฌ ํ - ์ž„๊ณ„์˜์—ญ (critical section)์— ์ง„์ž…์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ -> ๋ฎคํ…์Šค๊ฐ€ ๊ด€๋ฆฌํ•œ๋‹ค.

waiting ํ - ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜๊ธธ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ -> cv๊ฐ€ ๊ด€๋ฆฌํ•œ๋‹ค.

 

signal and continue

์‹œ๊ทธ๋„์„ ์ฃผ๊ณ  ๊ธฐ์กด ์Šค๋ ˆ๋“œ๊ฐ€ ์ค‘๋‹จ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

signal and wait

์‹œ๊ทธ๋„์„ ์ฃผ๊ณ  ๊ธฐ์กด ์Šค๋ ˆ๋“œ๋Š” ๋Œ€๊ธฐ ์ƒํƒœ์— ๋“ค์–ด๊ฐ€๋ฉฐ ๋‹ค์‹œ ๋ฝ์„ ์–ป์œผ๋ฉด ๊นจ์–ด๋‚œ๋‹ค.

 

์ž๋ฐ”์—์„œ์˜ ๋ชจ๋‹ˆํ„ฐ

๋ชจ๋“  ์ž๋ฐ” ๊ฐ์ฒด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด๋ถ€์— ๋ชจ๋‹ˆํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ synchronized ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

*์ž๋ฐ”์˜ ๋ชจ๋‹ˆํ„ฐ๋Š” cv๋ฅผ ํ•˜๋‚˜๋งŒ ๊ฐ€์ง„๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์ž๋ฐ”์˜ ๋ชจ๋‹ˆํ„ฐ๋„ ์„ธ๊ฐ€์ง€ ์ƒํƒœ๊ฐ€ ์žˆ๋Š”๋ฐ, ์šฉ์–ด๋งŒ ์‚ด์ง ๋‹ค๋ฅผ ๋ฟ ๊ธฐ๋Šฅ์€ ๊ฐ™๋‹ค.

๋ชจ๋‹ˆํ„ฐ ์ž๋ฐ” ๋ชจ๋‹ˆํ„ฐ
wait wait
signal notify
broadcast notifyAll