๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ŒCS/OS

[OS] ์ƒํ˜ธ๋ฐฐ์ œ ๋ฐฉ๋ฒ• : ๋ฎคํ…์Šค, ์„ธ๋งˆํฌ์–ด, ๋ชจ๋‹ˆํ„ฐ

by dar0m! 2021. 5. 2.

์ƒํ˜ธ ๋ฐฐ์ œ(mutual exclusion)

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

  • ๋ฐ์ปค ์•Œ๊ณ ๋ฆฌ์ฆ˜, ํ”ผ์ปค์Šจ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ œ๊ณผ์  ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ์ƒํ˜ธ๋ฐฐ์ œ๋Š” ๊ต์ฐฉ์ƒํƒœ์˜ 4๊ฐ€์ง€ ํ•„์š”์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
    1. ์ƒํ˜ธ๋ฐฐ์ œ - ๋ฐฐํƒ€์  ํ†ต์ œ๊ถŒ(๋™์‹œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€)
    2. ์ ์œ ๋Œ€๊ธฐ - ํ• ๋‹น๋œ ์ž์›์„ ๊ฐ€์ง„ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ์ž์›์„ ๊ธฐ๋‹ค๋ฆผ
    3. ๋น„์„ ์  - ์ž์›์„ ๋บ์„ ์ˆ˜ ์—†์Œ
    4. ์ˆœํ™˜๋Œ€๊ธฐ - ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ์ˆœํ™˜์ ์œผ๋กœ ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์š”๊ตฌํ•˜๋Š” ์ž์›์„ ๊ฐ–๊ณ  ์žˆ์Œ
  • ๊ต์ฐฉ ์ƒํƒœ์™€ ๊ธฐ์•„ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    ๊ต์ฐฉ ์ƒํƒœ(Deadlock) : ๋ฌดํ•œ ๋Œ€๊ธฐ
    ๊ธฐ์•„ ์ƒํƒœ(Starvation) : ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์•„ ์ž์›์„ ๊ณ„์† ํ• ๋‹น ๋ฐ›์ง€ ๋ชปํ•˜๋Š” ์ƒํƒœ
  • ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋‚˜ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ๋™๊ธฐํ™”์— ์‚ฌ์šฉ๋œ๋‹ค.
    ๋™๊ธฐํ™”(synchronize): mutual exclusion์„ ์œ„ํ•ด ์‹คํ–‰์„ ์ œ์–ดํ•˜๋Š” ๊ฒƒ. ๋ฎคํ…์Šค, ์„ธ๋งˆํฌ์–ด, ๋ชจ๋‹ˆํ„ฐ ๋“ฑ

์ž„๊ณ„ ์˜์—ญ(Critical Section)

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

๋”ฐ๋ผ์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์ด์šฉํ•˜๊ฒŒ๋” ๋ณด์žฅํ•ด์•ผ ํ•˜๋Š” ์˜์—ญ์ด๋‹ค.

์ž„๊ณ„ ์˜์—ญ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜ 3๊ฐ€์ง€ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•ด์•ผ ํ•œ๋‹ค.

  1. ์ƒํ˜ธ๋ฐฐ์ œ
    • ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„ ์˜์—ญ์— ๋“ค์–ด๊ฐ€์žˆ๋‹ค๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†์–ด์•ผ ํ•œ๋‹ค.
  2. ์ง„ํ–‰
    • ์ž„๊ณ„ ์˜์—ญ์— ๋“ค์–ด๊ฐ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†๋Š” ์ƒํƒœ์—์„œ ๋“ค์–ด๊ฐ€๋ ค ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ๋ผ๋ฉด ์–ด๋Š ๊ฒƒ์ด ๋“ค์–ด๊ฐˆ์ง€ ๊ฒฐ์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  3. ํ•œ์ • ๋Œ€๊ธฐ
    • ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ๊ธฐ์•„๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ํ•œ ๋ฒˆ ์ž„๊ณ„ ์˜์—ญ์— ๋“ค์–ด๊ฐ„ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ๋ฒˆ ์ž„๊ณ„ ์˜์—ญ์— ๋“ค์–ด๊ฐˆ ๋•Œ ์ œํ•œ์„ ๋‘์–ด์•ผ ํ•œ๋‹ค.

์ž„๊ณ„ ์˜์—ญ์˜ ๋™์‹œ์ ‘๊ทผ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฝ(lock), ์„ธ๋งˆํฌ์–ด(semaphore), ๋ชจ๋‹ˆํ„ฐ(monitor)๋“ฑ์ด ์žˆ๋‹ค.

 

๋ฎคํ…์Šค (Mutex, ์ƒํ˜ธ๋ฐฐ์ œ) Mutual Exclusion

๋ฎคํ…์Šค (์ถœ์ฒ˜ : https://m.blog.naver.com/qbxlvnf11/221362041286)

  • ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋™๊ธฐํ™”์— ์‚ฌ์šฉ๋œ๋‹ค.
  • ๊ณต์œ ๋œ ์ž์›์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๊ฒƒ
  • ์ž„๊ณ„์˜์—ญ(Critical Section)์„ ๊ฐ€์ง„ ์Šค๋ ˆ๋“œ์˜ Running time์ด ์„œ๋กœ ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ๋‹จ๋…์ ์œผ๋กœ ์‹คํ–‰๋˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ
    • ์ž„๊ณ„ ๊ตฌ์—ญ์— ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ(์ผ์ข…์˜ binary semaphore)
    • ์ƒํƒœ๊ฐ€ 0, 1๋กœ ์ด์ง„ ์„ธ๋งˆํฌ์–ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•จ
  • ๋‹ค์ค‘ ํ”„๋กœ์„ธ์Šค๋“ค์˜ ๊ณต์œ  ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์กฐ์œจํ•˜๊ธฐ ์œ„ํ•ด Locking๊ณผ Unlocking์„ ์‚ฌ์šฉ
    • ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž„๊ณ„์˜์—ญ์— ๋“ค์–ด๊ฐ€๊ธฐ ์œ„ํ•ด์„œ lock์„ ํ•˜๊ณ , ๋‚˜์˜ฌ ๋• unlock์„ ํ•œ๋‹ค.

 

๋ฎคํ…์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜

1. ๋ฐ์ปค(Dekker) ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • flag์™€ turn ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ž„๊ณ„ ๊ตฌ์—ญ์— ๋“ค์–ด๊ฐˆ ํ”„๋กœ์„ธ์Šค/์Šค๋ ˆ๋“œ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ์‹
    • flag : ํ”„๋กœ์„ธ์Šค ์ค‘ ๋ˆ„๊ฐ€ ์ž„๊ณ„์˜์—ญ์— ์ง„์ž…ํ•  ๊ฒƒ์ธ์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜
    • turn : ๋ˆ„๊ฐ€ ์ž„๊ณ„๊ตฌ์—ญ์— ๋“ค์–ด๊ฐˆ ์ฐจ๋ก€์ธ์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜
while(true) {
    flag[i] = true; // ํ”„๋กœ์„ธ์Šค i๊ฐ€ ์ž„๊ณ„ ๊ตฌ์—ญ ์ง„์ž… ์‹œ๋„
    while(flag[j]) { // ํ”„๋กœ์„ธ์Šค j๊ฐ€ ํ˜„์žฌ ์ž„๊ณ„ ๊ตฌ์—ญ์— ์žˆ๋Š”์ง€ ํ™•์ธ
        if(turn == j) { // j๊ฐ€ ์ž„๊ณ„ ๊ตฌ์—ญ ์‚ฌ์šฉ ์ค‘์ด๋ฉด
            flag[i] = false; // ํ”„๋กœ์„ธ์Šค i ์ง„์ž… ์ทจ์†Œ
            while(turn == j); // turn์ด j์—์„œ ๋ณ€๊ฒฝ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ
            flag[i] = true; // j turn์ด ๋๋‚˜๋ฉด ๋‹ค์‹œ ์ง„์ž… ์‹œ๋„
        }
    }
}

// ------- ์ž„๊ณ„ ๊ตฌ์—ญ ---------

turn = j; // ์ž„๊ณ„ ๊ตฌ์—ญ ์‚ฌ์šฉ ๋๋‚˜๋ฉด turn์„ ๋„˜๊น€
flag[i] = false; // flag ๊ฐ’์„ false๋กœ ๋ฐ”๊ฟ” ์ž„๊ณ„ ๊ตฌ์—ญ ์‚ฌ์šฉ ์™„๋ฃŒ๋ฅผ ์•Œ๋ฆผ

2. ํ”ผํ„ฐ์Šจ(Peterson) ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ๋ฐ์ปค์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, ์ƒ๋Œ€๋ฐฉ ํ”„๋กœ์„ธ์Šค/์Šค๋ ˆ๋“œ์—๊ฒŒ ์ง„์ž… ๊ธฐํšŒ๋ฅผ ์–‘๋ณดํ•˜๋Š” ๊ฒƒ์— ์ฐจ์ด๊ฐ€ ์žˆ์Œ
while(true) {
    flag[i] = true; // ํ”„๋กœ์„ธ์Šค i๊ฐ€ ์ž„๊ณ„ ๊ตฌ์—ญ ์ง„์ž… ์‹œ๋„
    turn = j; // ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ง„์ž… ๊ธฐํšŒ ์–‘๋ณด
    while(flag[j] && turn == j) { // ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง„์ž… ์‹œ๋„ํ•˜๋ฉด ๋Œ€๊ธฐ
    }
}

// ------- ์ž„๊ณ„ ๊ตฌ์—ญ ---------

flag[i] = false; // flag ๊ฐ’์„ false๋กœ ๋ฐ”๊ฟ” ์ž„๊ณ„ ๊ตฌ์—ญ ์‚ฌ์šฉ ์™„๋ฃŒ๋ฅผ ์•Œ๋ฆผ

3. ์ œ๊ณผ์ (Bakery) ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค/์Šค๋ ˆ๋“œ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜.
  • ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜์˜ ๋ฒˆํ˜ธํ‘œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„ ๊ตฌ์—ญ์— ์ง„์ž…ํ•œ๋‹ค.
while(true) {
    
    isReady[i] = true; // ๋ฒˆํ˜ธํ‘œ ๋ฐ›์„ ์ค€๋น„
    number[i] = max(number[0~n-1]) + 1; // ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ์ค‘์— ๊ฐ€์žฅ ํฐ ๋ฒˆํ˜ธ ๋ฐฐ์ • 
    isReady[i] = false; // ๋ฒˆํ˜ธํ‘œ ์ˆ˜๋ น ์™„๋ฃŒ
    
    for(j = 0; j < n; j++) { // ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค ๋ฒˆํ˜ธํ‘œ ๋น„๊ต
        while(isReady[j]); // ๋น„๊ต ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฒˆํ˜ธํ‘œ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ
        while(number[j] && number[j] < number[i] && j < i);
        
        // ํ”„๋กœ์„ธ์Šค j๊ฐ€ ๋ฒˆํ˜ธํ‘œ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•จ
        // ํ”„๋กœ์„ธ์Šค j์˜ ๋ฒˆํ˜ธํ‘œ < ํ”„๋กœ์„ธ์Šค i์˜ ๋ฒˆํ˜ธํ‘œ
    }
}

// ------- ์ž„๊ณ„ ๊ตฌ์—ญ ---------

number[i] = 0; // ์ž„๊ณ„ ๊ตฌ์—ญ ์‚ฌ์šฉ ์ข…๋ฃŒ

 

์„ธ๋งˆํฌ์–ด (Semaphore)

  • ๋ฎคํ…์Šค๊ฐ€ ์ž„๊ณ„ ์˜์—ญ์— ๋“ค์–ด๊ฐ€๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜๋ผ๋ฉด, ์„ธ๋งˆํฌ์–ด๋Š” ๋ณต์ˆ˜๊ฐœ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • wait๊ณผ signal์„ ํ†ตํ•ด ๊ตฌํ˜„๋œ๋‹ค.
    • wait์ด ๋จผ์ € ํ˜ธ์ถœ๋˜์–ด ์ž„๊ณ„์˜์—ญ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธ or ๋จผ์ € ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธ
    • ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋ฉด wait์„ ๋น ์ ธ๋‚˜์™€ ์ž„๊ณ„์˜์—ญ์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.
    • ์ดํ›„ signal์ด ํ˜ธ์ถœ๋˜์–ด ์ž„๊ณ„์˜์—ญ์—์„œ ๋น ์ ธ๋‚˜์™”์Œ์„ ์•Œ๋ฆฐ๋‹ค.

๋ฎคํ…์Šค์™€ ์„ธ๋งˆํฌ์–ด์˜ ์ฐจ์ด

์šฐ๋ฆฌ(ํ”„๋กœ์„ธ์Šค)๊ฐ€ ๋ฐฉ(์ž์›)์— ๋“ค์–ด๊ฐ€๋ ค๊ณ  ํ•  ๋•Œ, ๋ฎคํ…์Šค๋Š” ๋ฐฉ์— ๋“ค์–ด๊ฐ€๊ธฐ ์œ„ํ•œ ์—ด์‡ ์˜ ๊ฐœ์ˆ˜์ด๋ฉฐ, ์„ธ๋งˆํฌ์–ด๋Š” ๋นˆ ๋ฐฉ์˜ ์—ด์‡ ์˜ ๊ฐœ์ˆ˜์ด๋‹ค.

์ฆ‰ ๋ฎคํ…์Šค๋Š” ํ•œ ์‚ฌ๋žŒ์ด ๋นˆ ๋ฐฉ์— ๋Œ€ํ•œ ์—ด์‡ ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ ๋ฐฉ์— ๋“ค์–ด๊ฐ„๋‹ค๋ฉด, ๊ทธ ์‚ฌ๋žŒ์ด ๋‚˜์™€์•ผ๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์—ด์‡ ๋ฅผ ๊ฑด๋„ค๋ฐ›์•„ ๋ฐฉ์„ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜๋ฉด ์„ธ๋งˆํฌ์–ด๋Š” ๋ฐฉ์ด ๋„ค๊ฐœ๋ฉด ์—ด์‡ ๋„ ๋„ค๊ฐœ์ผ ๊ฒƒ์ด๊ณ  ํ•œ ์‚ฌ๋žŒ์ด ๋“ค์–ด๊ฐˆ ๋•Œ๋งˆ๋‹ค ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์€ ํ•˜๋‚˜์”ฉ ์ค„์–ด๋“ค์–ด 0๊ฐœ๊ฐ€ ๋˜๋ฉด ๋นˆ ๋ฐฉ์ด ๋‚˜์˜ฌ๋•Œ ๊นŒ์ง€ ๋Œ€๊ธฐํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด๋‹ค. ์•„๋ฌด๋‚˜ ๋จผ์ € ๋‚˜์™€์•ผ๋งŒ ๋ฐฉ๊ณผ ์—ด์‡ ๋ฅผ ํ•œ๊ฐœ์”ฉ ์–ป์–ด์„œ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

  • ์„ธ๋งˆํฌ์–ด๋Š” ์ž์›์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ผ์ข…์˜ '๋ณ€์ˆ˜'๋กœ์จ ์†Œ์œ  ๊ฐœ๋…์ด ์•„๋‹ˆ์ง€๋งŒ, ๋ฎคํ…์Šค๋Š” ์ž์›์„ ์ ์œ ํ•œ ํ”„๋กœ์„ธ์Šค๋‚˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ž ์‹œ ์†Œ์œ ํ•˜์˜€๋‹ค๊ฐ€ ์ž‘์—…์ด ๋๋‚˜๋ฉด ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค.
  • ์„ธ๋งˆํฌ์–ด์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฐ’์„ ๊ฐ–๋Š” ๊ฒƒ์ด ๋ฎคํ…์Šค์ด๋‹ค.
  • ์„ธ๋งˆํฌ์–ด๋Š” ๋ฎคํ…์Šค๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฎคํ…์Šค๋Š” ์„ธ๋งˆํฌ์–ด๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค.
  • ์„ธ๋งˆํฌ์–ด๋Š” ์‹œ์Šคํ…œ ๋ฒ”์œ„์— ๊ฑธ์ณ์žˆ๊ณ  ํŒŒ์ผ ์‹œ์Šคํ…œ ์ƒ์˜ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์กด์žฌํ•œ๋‹ค. ๋ฐ˜๋ฉด, ๋ฎคํ…์Šค๋Š” ํ”„๋กœ์„ธ์Šค ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง€๊ณ , ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋  ๋•Œ ์ž๋™์œผ๋กœ ์ง€์›Œ์ง„๋‹ค.
  • ์„ธ๋งˆํฌ์–ด๋Š” ๋™๊ธฐํ™” ๋Œ€์ƒ์ด ์—ฌ๋Ÿฌ๊ฐœ์ผ ๋•Œ, ๋ฎคํ…์Šค๋Š” ๋™๊ธฐํ™” ๋Œ€์ƒ์ด ์˜ค๋กœ์ง€ ํ•˜๋‚˜์ผ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

๋ชจ๋‹ˆํ„ฐ (Monitor)

  • ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ ๊ฐ„ ๋™๊ธฐํ™”์— ์‚ฌ์šฉ๋œ๋‹ค.
  • ๋ชจ๋‹ˆํ„ฐ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ทธ ์ž์ฒด์—์„œ ์ œ๊ณต๋œ๋‹ค.
  • C์–ธ์–ด์—๋Š” ์—†๊ณ , Java์—๋Š” ์žˆ๋‹ค.
  • ์ผ๋ จ์˜ ๋™๊ธฐํ™” ์ž‘์—…๋“ค์ด ์บก์Šํ™”๋˜์–ด ์žˆ์–ด์„œ synchronized, wait(), notify()๋“ฑ์˜ ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ํŽธํ•˜๊ฒŒ ๋™๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฆ‰, ์„ธ๋งˆํฌ์–ด์™€ ๋‹ฌ๋ฆฌ wait, signal ์„ค์ • ์—†์ด ํ•จ์ˆ˜ ์•ž์— synchronized๋ฅผ ๋ถ™์—ฌ์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ์ƒํ˜ธ๋ฐฐ์ œํ•˜์—ฌ ํ•จ์ˆ˜์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๋ฎคํ…์Šค์™€ ๋ชจ๋‹ˆํ„ฐ ์ฐจ์ด

๋ฎคํ…์Šค๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ„์— ๋™๊ธฐํ™” ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ๋ชจ๋‹ˆํ„ฐ๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ ๊ฐ„์˜ ๋™๊ธฐํ™”์— ์‚ฌ์šฉ๋œ๋‹ค.

 

์ฐธ๊ณ 

๋Œ“๊ธ€