CS๊ณต๋ถ€/์ปดํ“จํ„ฐ ๊ตฌ์กฐ&์šด์˜์ฒด์ œ

๋™๊ธฐํ™”์™€ ๊ต์ฐฉ ์ƒํƒœ

alswlfl 2026. 4. 30. 00:30

์ž์› ๊ณต์œ 

์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ํ”„๋กœ์„ธ์Šค ํ˜น์€ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ์ž์›์„ ๊ณต์œ  ์ž์›(shared resource)์ด๋ผ๊ณ  ํ•œ๋‹ค. ๊ณต์œ  ์ž์›์€ ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ํŒŒ์ผ์ด ๋  ์ˆ˜๋„ ์žˆ๊ณ , ์ „์—ญ ๋ณ€์ˆ˜๋‚˜ ์ž…์ถœ๋ ฅ์žฅ์น˜๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค ํ˜น์€ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜๋Š” ์ฝ”๋“œ ์ค‘ ๋™์‹œ์— ์‹คํ–‰ํ–ˆ์„ ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ž„๊ณ„ ๊ตฌ์—ญ(critical section)์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ํ”„๋กœ์„ธ์Šค A๊ฐ€ ์‹คํ–‰๋œ ๋’ค ํ”„๋กœ์„ธ์Šค B๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์ง€๋งŒ, ํ”„๋กœ์„ธ์Šค B๊ฐ€ ์‹คํ–‰๋œ ๋’ค ํ”„๋กœ์„ธ์Šค A๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ํ”„๋กœ์„ธ์Šค A์˜ '๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š” ์ฝ”๋“œ'์™€ ํ”„๋กœ์„ธ์Šค B์˜ '๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฝ๋Š” ์ฝ”๋“œ'๋Š” ์ž„๊ณ„ ๊ตฌ์—ญ์ด ๋œ๋‹ค.

 

๋™์‹œ์— ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋Š” ์Šค๋ ˆ๋“œ๋„ ์ž„๊ณ„ ๊ตฌ์—ญ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ ์Šค๋ ˆ๋“œ๋“ค์ด ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋Š” ๊ณผ์ •์€ (1) ํŒŒ์ผ์„ ์ฝ์–ด ๋“ค์ด๊ณ  (2) ์›ํ•˜๋Š” ๋‚ด์šฉ์„ ์ž‘์„ฑํ•œ ๋’ค, (3) ์ž‘์„ฑํ•œ ๋‚ด์šฉ์„ ์ €์žฅํ•˜๋Š” ๊ณผ์ •๊ณผ ๊ฐ™๋‹ค. ์Šค๋ ˆ๋“œ A์™€ B๊ฐ€ ๋™์‹œ์— ์ˆ˜ํ–‰๋  ๊ฒฝ์šฐ, ์Šค๋ ˆ๋“œ A์˜ ์ž‘์—… ๋‚ด์—ญ์€ ๋ฐ˜์˜๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

์Šค๋ ˆ๋“œ A (1) ํŒŒ์ผ ์ฝ๊ธฐ (2) ํŒŒ์ผ ์“ฐ๊ธฐ(thread A) (3) ํŒŒ์ผ ์ €์žฅ    
์Šค๋ ˆ๋“œ B   (1) ํŒŒ์ผ ์ฝ๊ธฐ (2) ํŒŒ์ผ ์“ฐ๊ธฐ(thread B) (3) ํŒŒ์ผ ์ €์žฅ  
ํŒŒ์ผ ๋‚ด์šฉ first first first first
thread A
first
thread B

 

ํ˜น์€ ์‹คํ–‰ ๋„์ค‘์— ๋ฌธ๋งฅ ๊ตํ™˜์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์Šค๋ ˆ๋“œ A์˜ ์ž‘์—…์€ ๋ฐ˜์˜๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋Š” ์ฝ”๋“œ๋Š” ์ž„๊ณ„ ๊ตฌ์—ญ์ด ๋œ๋‹ค.

์ž‘์—… ์ˆœ์„œ ์Šค๋ ˆ๋“œ A
ํŒŒ์ผ ์ฝ๊ธฐ
์Šค๋ ˆ๋“œ A
ํŒŒ์ผ ์“ฐ๊ธฐ
์Šค๋ ˆ๋“œ B
ํŒŒ์ผ ์ฝ๊ธฐ
์Šค๋ ˆ๋“œ B
ํŒŒ์ผ ์“ฐ๊ธฐ
์Šค๋ ˆ๋“œ A
ํŒŒ์ผ ์ €์žฅ
์Šค๋ ˆ๋“œ B
ํŒŒ์ผ ์ €์žฅ
 
ํŒŒ์ผ ๋‚ด์šฉ first first first first first first
thread A
first
thread B

 

์œ„ ์˜ˆ์‹œ๋“ค์ฒ˜๋Ÿผ ํ”„๋กœ์„ธ์Šค ํ˜น์€ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ž„๊ณ„ ๊ตฌ์—ญ์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์„ ๋ ˆ์ด์Šค ์ปจ๋””์…˜์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋ ˆ์ด์Šค ์ปจ๋””์…˜์ด ๋ฐœ์ƒํ•˜๋ฉด ์ž์›์˜ ์ผ๊ด€์„ฑ์ด ์†์ƒ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 2๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค ํ˜น์€ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž„๊ณ„ ์˜์—ญ์— ์ง„์ž…ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ๋‘˜ ์ค‘ ํ•˜๋‚˜๋Š” ์ž‘์—…์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•ด์•ผ ํ•œ๋‹ค.

 

๋ ˆ์ด์Šค ์ปจ๋””์…˜์„ ๋ฐฉ์ง€ํ•˜๋ฉด์„œ ์ž„๊ณ„ ๊ตฌ์—ญ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™๊ธฐํ™”๋˜์–ด์•ผ ํ•œ๋‹ค. ํ”„๋กœ์„ธ์Šค ํ˜น์€ ์Šค๋ ˆ๋“œ์˜ ๋™๊ธฐํ™”๋Š” ๋‹ค์Œ์˜ 2๊ฐ€์ง€ ์กฐ๊ฑด์„ ์ค€์ˆ˜ํ•˜๋ฉฐ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

  1. ์‹คํ–‰ ์ˆœ์„œ ์ œ์–ด: ํ”„๋กœ์„ธ์Šค ๋ฐ ์Šค๋ ˆ๋“œ๋ฅผ ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋กœ ์‹คํ–‰ํ•˜๊ธฐ
  2. ์ƒํ˜ธ ๋ฐฐ์ œ: ๋™์‹œ์— ์ ‘๊ทผํ•ด์„œ๋Š” ์•ˆ ๋˜๋Š” ์ž์›์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋ฐ ์Šค๋ ˆ๋“œ๋งŒ ์ ‘๊ทผํ•˜๊ธฐ

๋™๊ธฐํ™”์—๋Š” ์‹คํ–‰ ์ˆœ์„œ ์ œ์–ด๋ฅผ ์œ„ํ•œ ๋™๊ธฐํ™”๊ฐ€ ์žˆ๊ณ , ์ƒํ˜ธ ๋ฐฐ์ œ๋ฅผ ์œ„ํ•œ ๋™๊ธฐํ™”๊ฐ€ ์žˆ๋‹ค.


๋™๊ธฐํ™” ๊ธฐ๋ฒ•

๋ฎคํ…์Šค ๋ฝ(mutex lock)

๋™์‹œ์— ์ ‘๊ทผํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” ์ž์›์— ๋™์‹œ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋„๋ก ์ƒํ˜ธ ๋ฐฐ์ œ๋ฅผ ๋ณด์žฅํ•˜๋Š” ๋™๊ธฐํ™” ๋„๊ตฌ์ด๋‹ค. ๋ฎคํ…์Šค ๋ฝ์€ '์ƒํ˜ธ ๋ฐฐ์ œ๋ฅผ ์œ„ํ•œ ๋ฝ(lock)'์ด๋ผ๋Š” ๋œป์ด๋‹ค.

๋ฎคํ…์Šค ๋ฝ์˜ ์›๋ฆฌ๋Š” ์ž„๊ณ„ ๊ตฌ์—ญ์— ์ ‘๊ทผํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ๋ฐ˜๋“œ์‹œ ๋ฝ(lock)์„ ํš๋“(acquire)ํ•ด์•ผ ํ•˜๊ณ ,
์ž„๊ณ„ ๊ตฌ์—ญ์—์„œ์˜ ์ž‘์—…์ด ๋๋‚ฌ์œผ๋ฉด ๋ฝ์„ ํ•ด์ œ(release)ํ•ด์•ผ ํ•œ๋‹ค.

 

์ „ํ˜•์ ์ธ ๋ฎคํ…์Šค ๋ฝ์€ ํ”„๋กœ์„ธ์Šค ๋ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๋ณ€์ˆ˜(lock)์™€ 2๊ฐœ์˜ ํ•จ์ˆ˜(acquire, release)๋กœ ๊ตฌํ˜„๋œ๋‹ค.

  • ๊ณต์œ ํ•˜๋Š” ๋ณ€์ˆ˜: ๋ฎคํ…์Šค ๋ฝ์˜ '๋ฝ' ์—ญํ• ์„ ์ˆ˜ํ–‰
  • acquire(): ๋ฝ์„ ํš๋“ํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜
  • release(): ํš๋“ํ•œ ๋ฝ์„ ํ•ด์ œํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜

์ž„๊ณ„ ๊ตฌ์—ญ์— ์ง„์ž…ํ•˜๋ ค๋ฉด ํ”„๋กœ์„ธ์Šค ๋ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๋ฝ์„ ํš๋“ํ•˜๋Š” ๊ณผ์ •์ธ lock.acquire()์„ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ, ์ดํ›„ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ๋ฐ ์Šค๋ ˆ๋“œ๊ฐ€ lock.acquire()์„ ํ˜ธ์ถœํ•˜๋”๋ผ๋„ ๋ฝ์„ ํš๋“ํ•  ์ˆ˜ ์—†๊ณ , ๋ฝ์ด ํ•ด์ œ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค. ์ž„๊ณ„ ๊ตฌ์—ญ์˜ ์ž‘์—…์ด ๋๋‚˜๋ฉด ๋ฝ์„ ํ•ด์ œํ•˜๊ธฐ ์œ„ํ•ด lock.release()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉฐ, ๋งŒ์•ฝ ์ž„๊ณ„ ๊ตฌ์—ญ ์•ž์—์„œ ๋Œ€๊ธฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ํ˜น์€ ์Šค๋ ˆ๋“œ๊ฐ€ ์žˆ์—ˆ๋‹ค๋ฉด ๊ทธ๋•Œ ๋ฝ์„ ํš๋“ํ•˜๊ณ (lock.acquire() ํ˜ธ์ถœ์— ์„ฑ๊ณต) ์ž„๊ณ„ ๊ตฌ์—ญ์— ์ง„์ž…ํ•˜๊ฒŒ ๋œ๋‹ค.

lock.acquire()
// ์ž„๊ณ„ ๊ตฌ์—ญ
lock.release()

 

 

 

โ‘  ํ”„๋กœ์„ธ์Šค P1 acquire() ํ˜ธ์ถœ → ์ž„๊ณ„ ๊ตฌ์—ญ ์ง„์ž…

โ‘ก ํ”„๋กœ์„ธ์Šค P2 acquire() ํ˜ธ์ถœ, lock์„ ํš๋“ํ•˜์ง€ ๋ชปํ•ด ์ž„๊ณ„ ๊ตฌ์—ญ ์ ‘๊ทผ ๋ถˆ๊ฐ€

โ‘ข ํ”„๋กœ์„ธ์Šค P1 ์ž„๊ณ„ ๊ตฌ์—ญ ์ž‘์—… ์ข…๋ฃŒ, release() ํ˜ธ์ถœ

โ‘ฃ ํ”„๋กœ์„ธ์Šค P2 ์ž„๊ณ„ ๊ตฌ์—ญ ์ง„์ž…

 

 

 

 

 

ํŒŒ์ด์ฌ, C/C++ ๋“ฑ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ๋Š” ๋ฎคํ…์Šค ๋ฝ์„ ์ง€์›ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ acquire(), release() ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•  ํ•„์š” ์—†๋‹ค. ๋ฎคํ…์Šค ๋ฝ์ด๋ผ๋Š” ํ‘œํ˜„์„ ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์ž๋ฐ”๋„ ๋ฝ์„ ์ง€์›ํ•œ๋‹ค.

// os.Mutex.java

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class Mutex {
    static int sharedData = 0; // ๊ณต์œ  ๋ฐ์ดํ„ฐ
    static Lock lock = new ReentrantLock(); // ๋ฝ ์„ ์–ธ
    
    public static void main(String[] args){
        Thread thread1 = new Thread(new Increment());
        Thread thread2 = new Thread(new Decrement());
        
        thread1.start(); // ์ฒซ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ ์‹œ์ž‘
        thread2.start(); // ๋‘ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ ์‹œ์ž‘
        
        try {
            thread1.join(); // ์ฒซ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ ์ข…๋ฃŒ ๋Œ€๊ธฐ
            thread2.join(); // ๋‘ ๋ฒˆ์จฐ ์Šค๋ ˆ๋“œ ์ข…๋ฃŒ ๋Œ€๊ธฐ
        } catch (InterruptedException e){
            e.printStackTrace();
        }
        
        // ์ตœ์ข… ๊ณต์œ  ๋ฐ์ดํ„ฐ ๊ฐ’ ์ถœ๋ ฅ
        System.out.println("Final value of sharedData: " + sharedData);
    }
    
    static class Increment implements Runnable {
        public void run() {
            for(int i=0; i<1000000;i++) {
                lock.lock(); // ๋ฝ ํš๋“
                try {
                    sharedData++; // ๊ณต์œ  ๋ฐ์ดํ„ฐ ์ฆ๊ฐ€
                }finally {
                    lock.unlock(); // ๋ฝ ํ•ด์ œ
                }
            }
        }
    }

    static class Decrement implements Runnable {
        public void run() {
            for(int i=0; i<1000000;i++) {
                lock.lock(); // ๋ฝ ํš๋“
                try {
                    sharedData--; // ๊ณต์œ  ๋ฐ์ดํ„ฐ ๊ฐ์†Œ
                }finally {
                    lock.unlock(); // ๋ฝ ํ•ด์ œ
                }
            }
        }
    }
}

์„ธ๋งˆํฌ(semaphore)

๋ฎคํ…์Šค ๋ฝ์€ ํ•˜๋‚˜์˜ ๊ณต์œ  ์ž์›์„ ๊ณ ๋ คํ•˜๋Š” ๋™๊ธฐํ™” ๋„๊ตฌ์ด๊ณ , ์„ธ๋งˆํฌ๋Š” ๋ฎคํ…์Šค ๋ฝ๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, ๊ณต์œ  ์ž์›์ด ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๋Š” ์ƒํ™ฉ์—์„œ๋„ ๋™๊ธฐํ™”๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋„๊ตฌ์ด๋‹ค.

 

์„ธ๋งˆํฌ๋„ ๋ฎคํ…์Šค๋ฝ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜์™€ 2๊ฐœ์˜ ํ•จ์ˆ˜๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

  • ๋ณ€์ˆ˜ S: ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต์œ  ์ž์›์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜์ž„๊ณ„ ๊ตฌ์—ญ์— ์ง„์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ๊ฐœ์ˆ˜
    ๊ณต์œ  ์ž์›์˜ ๊ฐœ์ˆ˜๊ฐ€ S๊ฐœ์ผ ๊ฒฝ์šฐ, ์ž„๊ณ„ ๊ตฌ์—ญ์— ์ง„์ž…ํ•˜์—ฌ ๋™์‹œ์— ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ์„ธ์Šค ํ˜น์€ ์Šค๋ ˆ๋“œ๋„ S๊ฐœ์ด๋‹ค.
  • wait() ํ•จ์ˆ˜: ์ž„๊ณ„ ๊ตฌ์—ญ ์ง„์ž… ์ „ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜
  • signal() ํ•จ์ˆ˜: ์ž„๊ณ„ ๊ตฌ์—ญ ์ง„์ž… ํ›„ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜
wait()
// ์ž„๊ณ„ ๊ตฌ์—ญ
signal()

 

wait()๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ๊ฐ€์žฅ ๋จผ์ € (1) ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต์œ  ์ž์›์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜ S๋ฅผ 1 ๊ฐ์†Œ์‹œํ‚ค๊ณ , (2) ๋ณ€์ˆ˜ S์˜ ๊ฐ’์ด 0๋ณด๋‹ค ์ž‘์€์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ๋‹ค.

  • S๋ฅผ 1 ๊ฐ์†Œ์‹œ์ผฐ์„ ๋•Œ S๊ฐ€ 0 ์ด์ƒ์ด๋ผ๋Š” ๊ฒƒ์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต์œ  ์ž์›์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋‚จ์•„ ์žˆ์—ˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ, wait()๋ฅผ ํ˜ธ์ถœํ•œ ํ”„๋กœ์„ธ์Šค ๋ฐ ์Šค๋ ˆ๋“œ๋Š” ์ž„๊ณ„ ๊ตฌ์—ญ์— ์ง„์ž…ํ•œ๋‹ค.
  • S๋ฅผ 1 ๊ฐ์†Œ์‹œ์ผฐ์„ ๋•Œ S๊ฐ€ 0 ๋ฏธ๋งŒ์ด๋ผ๋Š” ๊ฒƒ์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต์œ  ์ž์›์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋‚จ์•„ ์žˆ์ง€ ์•Š์•˜์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ๋ณ€์ˆ˜ S์˜ ๊ฐ’์ด 0๋ณด๋‹ค ์ž‘์œผ๋ฉด (3) wait()๋ฅผ ํ˜ธ์ถœํ•œ ํ”„๋กœ์„ธ์Šค ๋ฐ ์Šค๋ ˆ๋“œ๋Š” ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ์ „ํ™˜๋˜์–ด ์ž„๊ณ„ ๊ตฌ์—ญ์— ์ง„์ž…ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.
wait() {
	S--; // (1)
    if (S < 0) { // (2)
    	sleep(); // (3)
    }
}

 

signal() ํ•จ์ˆ˜๋Š” ์ž„๊ณ„ ๊ตฌ์—ญ์—์„œ์˜ ์ž‘์—…์ด ๋๋‚œ ํ”„๋กœ์„ธ์Šค ๋ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ํ˜ธ์ถœํ•œ๋‹ค. signal()์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ๊ฐ€์žฅ ๋จผ์ € (1) ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต์œ  ์ž์›์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜ S๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚ค๊ณ , (2) ๋ณ€์ˆ˜ S์˜ ๊ฐ’์ด 0 ์ดํ•˜์ธ์ง€ ํ™•์ธํ•œ๋‹ค.

  • S๋ฅผ 1 ์ฆ๊ฐ€์‹œ์ผฐ์„ ๋•Œ S๊ฐ€ 0๋ณด๋‹ค ํฌ๋‹ค๋Š” ๊ฒƒ์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต์œ  ์ž์›์˜ ๊ฐœ์ˆ˜๊ฐ€ 1๊ฐœ ์ด์ƒ ๋‚จ์•„ ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.
  • S๋ฅผ 1 ์ฆ๊ฐ€์‹œ์ผฐ์„ ๋•Œ 0 ์ดํ•˜๋ผ๋Š” ๊ฒƒ์€ ์ž„๊ณ„ ๊ตฌ์—ญ์— ์ง„์ž…ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๊ธฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์กด์žฌํ•จ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ (3) ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ์ ‘์–ด๋“  ํ”„๋กœ์„ธ์Šค ์ค‘ ํ•˜๋‚˜๋ฅผ ์ค€๋น„ ์ƒํƒœ๋กœ ์ „ํ™˜ํ•œ๋‹ค.
siganl(){
	S++; // (1)
    if (S <= 0) { // (2)
    	wakeup(p) // (3)
    }
}

 

์•„๋ž˜์ฒ˜๋Ÿผ ๊ณต์œ  ์ž์›์ด 2๊ฐœ, ์ ‘๊ทผํ•˜๋ ค๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ 3๊ฐœ์ด๊ณ , P1→P2→P3 ์ˆœ์œผ๋กœ ์ž„๊ณ„ ๊ตฌ์—ญ์— ์ ‘๊ทผํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์‹คํ–‰๋œ๋‹ค.

 

โ‘  ํ”„๋กœ์„ธ์Šค P1 wait() ํ˜ธ์ถœ, S๋ฅผ 1 ๊ฐ์†Œ์‹œํ‚ค๋ฉด S = 1 ์ด๋ฏ€๋กœ ์ž„๊ณ„ ๊ตฌ์—ญ ์ง„์ž…

โ‘ก ํ”„๋กœ์„ธ์Šค P2 wait() ํ˜ธ์ถœ, S๋ฅผ 1 ๊ฐ์†Œ์‹œํ‚ค๋ฉด S = 0 ์ด๋ฏ€๋กœ ์ž„๊ณ„ ๊ตฌ์—ญ ์ง„์ž…

โ‘ข ํ”„๋กœ์„ธ์Šค P3 wait() ํ˜ธ์ถœ, S๋ฅผ 1 ๊ฐ์†Œ์‹œํ‚ค๋ฉด S = -1 ์ด๋ฏ€๋กœ ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ์ „ํ™˜

โ‘ฃ ํ”„๋กœ์„ธ์Šค P1 ์ž„๊ณ„ ๊ตฌ์—ญ ์ž‘์—… ์ข…๋ฃŒ. signal() ํ˜ธ์ถœ. S๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚ค๋ฉด S=0์ด๋ฏ€๋กœ ๋Œ€๊ธฐ ์ƒํƒœ์˜€๋˜ P3์„ ์ค€๋น„ ์ƒํƒœ๋กœ ์ „ํ™˜

โ‘ค ๊นจ์–ด๋‚œ ํ”„๋กœ์„ธ์Šค P3 ์ž„๊ณ„ ๊ตฌ์—ญ ์ง„์ž…

โ‘ฅ ํ”„๋กœ์„ธ์Šค P2 ์ž„๊ณ„ ๊ตฌ์—ญ ์ž‘์—… ์ข…๋ฃŒ. signal() ํ˜ธ์ถœ. S๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚ค๋ฉด S=1

โ‘ฆ ํ”„๋กœ์„ธ์Šค P3 ์ž„๊ณ„ ๊ตฌ์—ญ ์ž‘์—… ์ข…๋ฃŒ. signal() ํ˜ธ์ถœ. S๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚ค๋ฉด S=2

 

์„ธ๋งˆํฌ๋„ ๋ฎคํ…์Šค ๋ฝ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค.

import java.util.concurrent.Semaphore;

public class Sem {
    static int sharedData = 0; // ๊ณต์œ  ๋ฐ์ดํ„ฐ
    // ์„ธ๋งˆํฌ ์ƒ์„ฑ, ๊ณต์œ  ์ž์› 1๊ฐœ
    static Semaphore semaphore = new Semaphore(1);

    public static void main(String[] args){
        Thread thread1 = new Thread(new Increment());
        Thread thread2 = new Thread(new Decrement());

        thread1.start(); // ์ฒซ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ ์‹œ์ž‘
        thread2.start(); // ๋‘ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ ์‹œ์ž‘

        try {
            thread1.join(); // ์ฒซ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ ์ข…๋ฃŒ ๋Œ€๊ธฐ
            thread2.join(); // ๋‘ ๋ฒˆ์จฐ ์Šค๋ ˆ๋“œ ์ข…๋ฃŒ ๋Œ€๊ธฐ
        } catch (InterruptedException e){
            e.printStackTrace();
        }

        // ์ตœ์ข… ๊ณต์œ  ๋ฐ์ดํ„ฐ ๊ฐ’ ์ถœ๋ ฅ
        System.out.println("Final value of sharedData: " + sharedData);
    }

    static class Increment implements Runnable {
        public void run() {
            for(int i=0; i<1000000;i++) {
                try {
                    semaphore.acquire(); // ์„ธ๋งˆํฌ ํš๋“
                    sharedData++; // ๊ณต์œ  ๋ฐ์ดํ„ฐ ์ฆ๊ฐ€
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    semaphore.release(); // ์„ธ๋งˆํฌ ํ•ด์ œ
                }
            }
        }
    }

    static class Decrement implements Runnable {
        public void run() {
            for(int i=0; i<1000000;i++) {
                try {
                    semaphore.acquire(); // ์„ธ๋งˆํฌ ํš๋“
                    sharedData--; // ๊ณต์œ  ๋ฐ์ดํ„ฐ ๊ฐ์†Œ
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    semaphore.release(); // ์„ธ๋งˆํฌ ํ•ด์ œ
                }
            }
        }
    }
}

 

์ด์ง„ ์„ธ๋งˆํฌ์™€ ์นด์šดํŒ… ์„ธ๋งˆํฌ

์„ธ๋งˆํฌ๋Š” ํฌ๊ฒŒ 2๊ฐ€์ง€ ์ข…๋ฅ˜๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ํ•˜๋‚˜๋Š” ์ด์ง„ ์„ธ๋งˆํฌ์ด๊ณ , ๋˜ ํ•˜๋‚˜๋Š” ์นด์šดํŒ… ์„ธ๋งˆํฌ์ด๋‹ค. ์œ„ ์„ธ๋งˆํฌ๋Š” ์นด์šดํŒ… ์„ธ๋งˆํฌ๋กœ, ๊ณต์œ  ์ž์›์ด ์—ฌ๋Ÿฌ ๊ฐœ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์„ธ๋งˆํฌ์ด๋‹ค. ์ด์ง„ ์„ธ๋งˆํฌ๋Š” S๊ฐ€ 0๊ณผ 1์˜ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์„ธ๋งˆํฌ๋กœ, ์‚ฌ์‹ค์ƒ ๋ฎคํ…์Šค ๋ฝ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.


์กฐ๊ฑด ๋ณ€์ˆ˜์™€ ๋ชจ๋‹ˆํ„ฐ

์กฐ๊ฑด ๋ณ€์ˆ˜

์‹คํ–‰ ์ˆœ์„œ ์ œ์–ด๋ฅผ ์œ„ํ•œ ๋™๊ธฐํ™” ๋„๊ตฌ๋กœ, ํŠน์ • ์กฐ๊ฑด ํ•˜์— ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰/์ผ์‹œ ์ค‘๋‹จํ•จ์œผ๋กœ์จ ํ”„๋กœ์„ธ์Šค๋‚˜ ์Šค๋ ˆ๋“œ์˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.

์กฐ๊ฑด ๋ณ€์ˆ˜์— ๋Œ€ํ•ด wait()์™€ signal() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, wait() ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœํ•œ ํ”„๋กœ์„ธ์Šค ๋ฐ ์Šค๋ ˆ๋“œ์˜ ์ƒํƒœ๋ฅผ ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ์ „ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๊ณ , signal() ํ•จ์ˆ˜๋Š” wait()๋กœ ์ผ์‹œ ์ค‘์ง€๋œ ํ”„๋กœ์„ธ์Šค ๋ฐ ์Šค๋ ˆ๋“œ์˜ ์‹คํ–‰์„ ์žฌ๊ฐœํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

  • ์•„์ง ํŠน์ • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋  ์กฐ๊ฑด์ด ๋˜์ง€ ์•Š์•˜์„ ๋•Œ๋Š” wait()๋ฅผ ํ†ตํ•ด ์‹คํ–‰์„ ์ค‘๋‹จํ•œ๋‹ค.
  • ํŠน์ • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋  ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜์—ˆ์„ ๋•Œ๋Š” signal()์„ ํ†ตํ•ด ์‹คํ–‰์„ ์žฌ๊ฐœํ•œ๋‹ค.

 

 

 

 

cv๋ผ๋Š” ์กฐ๊ฑด ๋ณ€์ˆ˜๊ฐ€ ์žˆ๊ณ , ํ”„๋กœ์„ธ์Šค P1์˜ ์‹คํ–‰ ๋„์ค‘์— ์กฐ๊ฑด ๋ณ€์ˆ˜ cv์— ๋Œ€ํ•ด wait() ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœํ•˜๋ฉด, ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ cv.signal()์„ ํ˜ธ์ถœํ•˜๊ธฐ ์ „๊นŒ์ง€ ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ์ ‘์–ด๋“ ๋‹ค.

 

 

 

 

 

 

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

๊ณต์œ  ์ž์›๊ณผ ๊ทธ ๊ณต์œ  ์ž์›์„ ๋‹ค๋ฃจ๋Š” ํ•จ์ˆ˜(์ธํ„ฐํŽ˜์ด์Šค)๋กœ ๊ตฌ์„ฑ๋œ ๋™๊ธฐํ™” ๋„๊ตฌ๋กœ, ์ƒํ˜ธ ๋ฐฐ์ œ๋ฅผ ์œ„ํ•œ ๋™๊ธฐํ™”๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‹คํ–‰ ์ˆœ์„œ ์ œ์–ด๋ฅผ ์œ„ํ•œ ๋™๊ธฐํ™”๊นŒ์ง€ ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ”„๋กœ์„ธ์Šค ๋ฐ ์Šค๋ ˆ๋“œ๋Š” ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ์ •ํ•ด์ง„ ๊ณต์œ  ์ž์› ์—ฐ์‚ฐ(์ธํ„ฐํŽ˜์ด์Šค)์„ ํ†ตํ•ด ๋ชจ๋‹ˆํ„ฐ ๋‚ด๋กœ ์ง„์ž…ํ•ด์•ผ ํ•˜๊ณ , ๋ชจ๋‹ˆํ„ฐ ์•ˆ์— ์ง„์ž…ํ•˜์—ฌ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค ๋ฐ ์Šค๋ ˆ๋“œ๋Š” ํ•ญ์ƒ ํ•˜๋‚˜์—ฌ์•ผ ํ•œ๋‹ค. ์ด๋ฏธ ๋ชจ๋‹ˆํ„ฐ ๋‚ด๋กœ ์ง„์ž…ํ•ด ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ๋ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ์—์„œ ๋Œ€๊ธฐํ•ด์•ผ ํ•œ๋‹ค.

 

์กฐ๊ฑด๋ณ€์ˆ˜๋ฅผ ํ•จ๊ป˜ ํ™œ์šฉํ•˜๋ฉด ์‹คํ–‰ ์ˆœ์„œ ์ œ์–ด๋ฅผ ์œ„ํ•œ ๋™๊ธฐํ™”๋„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค A, B ์ค‘ ๋ฐ˜๋“œ์‹œ A๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๊ณ , ๋‹ค์Œ์œผ๋กœ B๊ฐ€ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, ํ”„๋กœ์„ธ์Šค B๋Š” ๋ชจ๋‹ˆํ„ฐ ๋‚ด์—์„œ ์‹คํ–‰๋˜๊ธฐ์— ์•ž์„œ ํ”„๋กœ์„ธ์Šค A์˜ ์‹คํ–‰์ด ๋๋‚ฌ๋Š”์ง€๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค.

  • ํ”„๋กœ์„ธ์Šค B๊ฐ€ ํ”„๋กœ์„ธ์Šค A๋ณด๋‹ค ๋‚˜์ค‘์— ๋ชจ๋‹ˆํ„ฐ ๋‚ด๋กœ ์ง„์ž…ํ–ˆ์„ ๊ฒฝ์šฐ, 'ํ”„๋กœ์„ธ์Šค A๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๊ณ , ํ”„๋กœ์„ธ์Šค B๊ฐ€ ์‹คํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค.'๋Š” ์กฐ๊ฑด์ด ์ถฉ์กฑ์™ธ์–ด ํ”„๋กœ์„ธ์Šค B๋Š” ๋ชจ๋‹ˆํ„ฐ ๋‚ด๋กœ ์ง„์ž…ํ•ด ์‹คํ–‰๋œ๋‹ค.

์กฐ๊ฑด์„ ์ถฉ์กฑํ•œ ๊ฒฝ์šฐ

  • ํ”„๋กœ์„ธ์Šค B๊ฐ€ ํ”„๋กœ์„ธ์Šค A๋ณด๋‹ค ๋จผ์ € ๋ชจ๋‹ˆํ„ฐ ๋‚ด๋กœ ์ง„์ž…ํ–ˆ์„ ๊ฒฝ์šฐ, 'ํ”„๋กœ์„ธ์Šค A๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๊ณ  B๊ฐ€ ์‹คํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค'๋Š” ์กฐ๊ฑด์— ์–ด๊ธ‹๋‚˜๋ฏ€๋กœ, ํŠน์ • ์กฐ๊ฑด ๋ณ€์ˆ˜(cv)์— ๋Œ€ํ•ด cv.wait()๋ฅผ ํ˜ธ์ถœํ•ด ํ”„๋กœ์„ธ์Šค B๋ฅผ ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ์ ‘์–ด๋“ค๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    ํ”„๋กœ์„ธ์Šค B๊ฐ€ ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋Š” ์‚ฌ์ด ํ”„๋กœ์„ธ์Šค A๊ฐ€ ๋ชจ๋‹ˆํ„ฐ ๋‚ด๋กœ ์ง„์ž…ํ•ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ๊ณ , ์‹คํ–‰ ์ดํ›„ cv.signal()์„ ํ˜ธ์ถœํ•ด ๋Œ€๊ธฐ ์ƒํƒœ์— ์žˆ๋˜ ํ”„๋กœ์„ธ์Šค B๋ฅผ ๋ชจ๋‹ˆํ„ฐ ์•ˆ์œผ๋กœ ์žฌ์ง„์ž… ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•ด ์‹คํ–‰ ์ˆœ์„œ ์ œ์–ด๋ฅผ ์œ„ํ•œ ๋™๊ธฐํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง„ ๊ฒฝ์šฐ


์Šค๋ ˆ๋“œ ์•ˆ์ „

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์–ด๋–ค ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜, ๊ฐ์ฒด์— ๋™์‹œ ์ ‘๊ทผ์ด ์ด๋ฃจ์–ด์ ธ๋„ ์‹คํ–‰์— ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋ ˆ์ด์Šค ์ปจ๋””์…˜์ด ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด ์ด๋Š” ์Šค๋ ˆ๋“œ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ƒํ™ฉ์ด์ง€๋งŒ, ์–ด๋–ค ํ•จ์ˆ˜๊ฐ€ ์Šค๋ ˆ๋“œ ์•ˆ์ „ํ•˜๋‹ค๋ฉด, ์ด๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์— ์˜ํ•ด ํ˜ธ์ถœ๋˜์–ด๋„ ๋ ˆ์ด์Šค ์ปจ๋””์…˜์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.


๊ต์ฐฉ ์ƒํƒœ

์ผ์–ด๋‚˜์ง€ ์•Š์„ ์‚ฌ๊ฑด์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ํ”„๋กœ์„ธ์Šค์˜ ์ง„ํ–‰์ด ๋ฉˆ์ถฐ ๋ฒ„๋ฆฌ๋Š” ํ˜„์ƒ์„ ๋งํ•œ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ํ”„๋กœ์„ธ์Šค A๋Š” ์ž์› X๋ฅผ ์ ์œ ํ•œ ์ฑ„ ํ”„๋กœ์„ธ์Šค B๊ฐ€ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ์ž์› Y์˜ ์‚ฌ์šฉ์ด ๋๋‚˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ , ํ”„๋กœ์„ธ์Šค B๋Š” ์ž์› Y๋ฅผ ์ ์œ ํ•œ ์ฑ„ ํ”„๋กœ์„ธ์Šค A๊ฐ€ ์ ์œ ํ•œ ์ž์› X์˜ ์‚ฌ์šฉ์ด ๋๋‚˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, ๋‘ ํ”„๋กœ์„ธ์Šค๋Š” ์„œ๋กœ๊ฐ€ ๊ฐ€์ง„ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๋‹ค๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๊ต์ฐฉ ์ƒํƒœ ์˜ˆ์‹œ

๊ต์ฐฉ ์ƒํƒœ ๋ฐœ์ƒ ์กฐ๊ฑด

๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์—๋Š” 4๊ฐ€์ง€ ํ•„์š” ์กฐ๊ฑด์ด ์žˆ๋‹ค. ์ด ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๊ต์ฐฉ ์ƒํƒœ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ , 4๊ฐœ์˜ ์กฐ๊ฑด์ด ๋ชจ๋‘ ๋งŒ์กฑํ•  ๋•Œ ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์ƒ๊ธด๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

  1. ์ƒํ˜ธ ๋ฐฐ์ œ
    ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ž์›์„ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ƒํ˜ธ ๋ฐฐ์ œ์˜ ์ƒํ™ฉ์—์„œ ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. ์ ์œ ์™€ ๋Œ€๊ธฐ
    ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ค ์ž์›์„ ํ• ๋‹น๋ฐ›์€ ์ƒํƒœ(์ ์œ )์—์„œ ๋‹ค๋ฅธ ์ž์› ํ• ๋‹น๋ฐ›๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค๋ฉด(๋Œ€๊ธฐ) ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. ๋น„์„ ์ 
    ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋„ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ž์›์„ ๊ฐ•์ œ๋กœ ๋บด์•—์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  4. ํ™˜ํ˜• ๋Œ€๊ธฐ
    ํ”„๋กœ์„ธ์Šค์™€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์š”์ฒญํ•œ ์ž์›์ด ์›์˜ ํ˜•ํƒœ๋ฅผ ์ด๋ฃจ๋Š” ๊ฒฝ์šฐ ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ต์ฐฉ ์ƒํƒœ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์šด์˜์ฒด์ œ๋Š” ๊ต์ฐฉ ์ƒํƒœ์˜ ๋ฐœ์ƒ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋„๋ก ์ž์›์„ ๋ถ„๋ฐฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๊ณ , ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ์ •๋„๋กœ ์กฐ๊ธˆ์”ฉ ์ž์›์„ ํ• ๋‹นํ•˜๋‹ค๊ฐ€ ๊ต์ฐฉ ์ƒํƒœ์˜ ์œ„ํ—˜์ด ์žˆ์„ ๋•Œ ์ž์›์„ ํ• ๋‹นํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ํšŒํ”ผํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋˜ ์ž์›์„ ์ œ์•ฝ ์—†์ด ํ• ๋‹นํ•˜๋‹ค๊ฐ€ ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ๊ฒ€์ถœํ•œ ํ›„ ํšŒ๋ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๊ต์ฐฉ ์ƒํƒœ ์˜ˆ๋ฐฉ
    ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” 4๊ฐ€์ง€ ํ•„์š” ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๋ฅผ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
    - ํ•œ ํ”„๋กœ์„ธ์Šค์— ํ•„์š”ํ•œ ์ž์›์„ ๋ชฐ์•„ ์ฃผ๊ณ , ๊ทธ ๋‹ค์Œ์— ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ํ•„์š”ํ•œ ์ž์›์„ ๋ชฐ์•„ ์ฃผ๋ฉด ์ ์œ ์™€ ๋Œ€๊ธฐ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
    - ํ• ๋‹น ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ž์›์— ๋ฒˆํ˜ธ๋ฅผ ๋งค๊ธฐ๊ณ  ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ํ• ๋‹นํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์›ํ˜• ๋Œ€๊ธฐ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๊ต์ฐฉ ์ƒํƒœ ํšŒํ”ผ
    ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ์ •๋„๋กœ๋งŒ ์กฐ์‹ฌํ•˜๋ฉด์„œ ์ž์›์„ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๊ต์ฐฉ ์ƒํƒœ ํšŒํ”ผ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ํ•œ์ •๋œ ์ž์›์˜ ๋ฌด๋ถ„๋ณ„ํ•œ ํ• ๋‹น์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.
    ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ์ž์›์ด ์ถฉ๋ถ„ํ•œ ์ƒํ™ฉ์—์„œ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์ด ํ•œ๋‘ ๊ฐœ์˜ ์ ์€ ์ž์›๋งŒ ์š”๊ตฌํ•œ๋‹ค๋ฉด ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์ง€๋งŒ, ์ž์›์ด ํ•œ์ •๋œ ์ƒํ™ฉ์—์„œ๋Š” ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋“ค์ด ํ•œ ๋ฒˆ์— ๋งŽ์€ ์ž์›์„ ์š”๊ตฌํ•œ๋‹ค๋ฉด ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ์œ„ํ—˜์ด ์ฆ๊ฐ€ํ•œ๋‹ค.
    ๊ต์ฐฉ ์ƒํƒœ ํšŒํ”ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์€ํ–‰์› ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋‹ค.
  • ๊ต์ฐฉ ์ƒํƒœ ๊ฒ€์ถœ ํ›„ ํšŒํ”ผ
    ๊ต์ฐฉ ์ƒํƒœ์˜ ๋ฐœ์ƒ์„ ์ธ์ •ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ์‚ฌํ›„ ์กฐ์น˜์— ํ•ด๋‹นํ•˜๋ฉฐ, ์šด์˜์ฒด์ œ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ์š”๊ตฌํ•  ๋•Œ๋งˆ๋‹ค ๊ทธ๋•Œ ๊ทธ๋•Œ ์ž์›์„ ํ• ๋‹นํ•˜๊ณ  ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ต์ฐฉ ์ƒํƒœ์˜ ๋ฐœ์ƒ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค. ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๊ฒ€์ถœ๋˜๋ฉด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž์› ์„ ์ ์„ ํ†ตํ•ด ํšŒ๋ณต์‹œํ‚ค๊ฑฐ๋‚˜, ๊ต์ฐฉ ์ƒํƒœ์— ๋†“์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ•์ œ ์ข…๋ฃŒํ•จ์œผ๋กœ์จ ํšŒ๋ณต์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
    - ์ž์› ์„ ์ ์„ ํ†ตํ•œ ํšŒ๋ณต: ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ํ•ด๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ ๊ฐ•์ œ๋กœ ์ž์›์„ ๋นผ์•—์•„ ํ•œ ํ”„๋กœ์„ธ์Šค์— ๋ชฐ์•„์„œ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ

์ฐธ๊ณ  ์ž๋ฃŒ

์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ปดํ“จํ„ฐ ๊ณผํ•™์ด๋‹ค