๐Ÿ‘จ๐Ÿปโ€๐ŸŒพ ์ƒ์‚ฐ์ž ์†Œ๋น„์ž ๋ฌธ์ œ

์•ต์šฐยท2025๋…„ 7์›” 26์ผ

Producer-consumer problem

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

์œ„ ์‚ฌ์ง„์„ ๋ณด๋ฉด, ๊ณต์œ ๋ฒ„ํผ๊ฐ€ 3๋งŒํผ ์ฑ„์›Œ์กŒ์—ˆ๋‹ค. ์ด ์ƒํƒœ์—์„œ ์ƒ์‚ฐ์ž์™€ ์†Œ๋น„์ž๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•œ๋‹ค.

์ƒ์‚ฐ์ž๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜์—ˆ์„ ๋•Œ sum์€ 4๊ฐ€ ๋˜๊ณ  ๊ทธ ์ดํ›„ ์†Œ๋น„์ž๊ฐ€ ์‹คํ–‰๋˜๋ฉด ์†Œ๋น„์ž๊ฐ€ ์ƒ์‚ฐ์ž์™€ ๋™์‹œ์— ์ฝ์€ sum ๋ณ€์ˆ˜์˜ ๊ฐ’์€ 3์ด์—ˆ์œผ๋ฏ€๋กœ sum์ด 2๊ฐ€ ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ๋™์‹œ์— ์ ‘๊ทผํ•˜๋Š” ๋ฌธ์ œ์—์„œ ์‹คํ–‰ ์ˆœ์„œ์— ๋”ฐ๋ฅธ ๊ฒฐ๊ณผ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์ƒ์‚ฐ์ž-์†Œ๋น„์ž ๊ด€๊ณ„

ํ‚ค๋ณด๋“œ ์ž…๋ ฅ, ๋ฏธ๋””์–ด ํ”Œ๋ ˆ์ด์–ด, ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋ฒ„๋„ ์ƒ์‚ฐ์ž-์†Œ๋น„์ž ๊ด€๊ณ„์ด๋‹ค.

๋ฌธ์ œ์ 

  1. ์ƒํ˜ธ ๋ฐฐ์ œ ๋ฌธ์ œ - ์ƒ์‚ฐ์ž๋“ค๊ณผ ์†Œ๋น„์ž๋“ค์˜ ๊ณต์œ  ๋ฒ„ํผ์— ๋Œ€ํ•œ ์ƒํ˜ธ ๋ฐฐ์ œ

  2. ๋น„์–ด ์žˆ๋Š” ๊ณต์œ  ๋ฒ„ํผ ๋ฌธ์ œ - ๋น„์–ด ์žˆ๋Š” ๊ณต์œ ๋ฒ„ํผ๋ฅผ ์†Œ๋น„์ž๊ฐ€ ์ฝ์œผ๋ฉด ์•ˆ ๋œ๋‹ค.

  3. ๊ฝ‰ ์ฐฌ ๊ณต์œ ๋ฒ„ํผ ๋ฌธ์ œ - ๊ฝ‰ ์ฐฌ ๊ณต์œ ๋ฒ„ํผ์— ์ƒ์‚ฐ์ž๊ฐ€ ๋” ์ด์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.

์„ธ๋งˆํฌ์–ด 2๊ฐœ๋ฅผ ์ด์šฉํ•œ ํ•ด๊ฒฐ

์„ธ๋งˆํฌ์–ด1. ์ฝ๊ธฐ์šฉ ์„ธ๋งˆํฌ์–ด

์ฝ๊ธฐ ๊ฐ€๋Šฅํ•œ ๋ฒ„ํผ ๊ฐฏ์ˆ˜๋ฅผ ํ™•์ธํ•จ์œผ๋กœ์จ ๋น„์–ด์žˆ๋Š” ๋ฒ„ํผ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

๋น„์–ด ์žˆ๋Š” ๋ฒ„ํผ์— ๋Œ€ํ•˜์—ฌ ์†Œ๋น„์ž๊ฐ€ P ์—ฐ์‚ฐ ํ›„ ๋ฒ„ํผ๋ฅผ ์ฝ์œผ๋ ค๊ณ  ํ•˜๋ฉด ์žฌ์›Œ๋ฒ„๋ฆฌ๊ณ , ์ƒ์‚ฐ์ž๋Š” ๋ฒ„ํผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ณ  V ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์†Œ๋น„์ž๋ฅผ ๊นจ์šด๋‹ค.

์„ธ๋งˆํฌ์–ด2. ์“ฐ๊ธฐ์šฉ ์„ธ๋งˆํฌ์–ด

์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ๋ฒ„ํผ ๊ฐฏ์ˆ˜๋ฅผ ํ™•์ธํ•จ์œผ๋กœ์จ ๊ฝ‰ ์ฐฌ ๋ฒ„ํผ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

์ƒ์‚ฐ์ž๊ฐ€ P ์—ฐ์‚ฐ ํ›„ ๊ฝ‰ ์ฐฌ ๋ฒ„ํผ์— ๋Œ€ํ•ด ์“ฐ๋ ค๊ณ  ํ•˜๋ฉด ์žฌ์›Œ๋ฒ„๋ฆฌ๊ณ , ์†Œ๋น„์ž๋Š” ๋ฒ„ํผ๋ฅผ ์ฝ๊ณ  V ์—ฐ์‚ฐ์œผ๋กœ ์ƒ์‚ฐ์ž๋ฅผ ๊นจ์šด๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ‘œํ˜„

์œ„ ๋‘ ์„ธ๋งˆํฌ์–ด๋ฅผ ๊ฐ€์ง€๊ณ  ๋™์ž‘ํ•˜๋Š” ์†Œ๋น„์ž์™€ ์ƒ์‚ฐ์ž๋ฅผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ‘œํ˜„ํ•ด๋ณด์ž.

  • R: ๋ฒ„ํผ์— ์ฝ๊ธฐ ๊ฐ€๋Šฅํ•œ ๋ฒ„ํผ์˜ ๊ฐœ์ˆ˜, 0์ด๋ฉด(๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ) ๋Œ€๊ธฐ
  • W: ๋ฒ„ํผ์— ์žˆ๋Š” ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ๋ฒ„ํผ์˜ ๊ฐœ์ˆ˜, 0์ด๋ฉด(๊ฝ‰ ์ฐจ์žˆ๋Š” ๊ฒฝ์šฐ) ๋Œ€๊ธฐ
  • M: ๋ฎคํ…์Šค, ์ƒ์‚ฐ์ž ์†Œ๋น„์ž ๋ชจ๋‘ ์‚ฌ์šฉ

์†Œ๋น„์ž ์Šค๋ ˆ๋“œ

Consumer {
	while(true) {
    	P(R); // ์„ธ๋งˆํฌ์–ด R์— P/wait ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ฒ„ํผ๊ฐ€ ๋น„์–ด ์žˆ์œผ๋ฉด(์ฝ๊ธฐ ๊ฐ€๋Šฅํ•œ ๋ฒ„ํผ ์ˆ˜=0) ๋Œ€๊ธฐํ•œ๋‹ค.
        
        ๋ฎคํ…์Šค๋ฅผ(M)์„ ์ž ๊ทผ๋‹ค.
        ๊ณต์œ ๋ฒ„ํผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š”๋‹ค. // ์ž„๊ณ„๊ตฌ์—ญ ์ฝ”๋“œ
        ๋ฎคํ…์Šค(M)์„ ์—ฐ๋‹ค.
        
        V(W); // ์„ธ๋งˆํฌ์–ด W์— ๋Œ€ํ•ด V/signal ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ฒ„ํผ๊ฐ€ ๋น„๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” Producer๋ฅผ ๊นจ์šด๋‹ค.
        
    }
}

์ƒ์‚ฐ์ž ์Šค๋ ˆ๋“œ

Producer { 
	while(true) {
    	P(W); // ์„ธ๋งˆํฌ์–ด W์— P/wait ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ฒ„ํผ๊ฐ€ ๊ฝ‰ ์ฐจ ์žˆ์œผ๋ฉด(์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ๋ฒ„ํผ ์ˆ˜=0) ๋Œ€๊ธฐ
        
        ๋ฎคํ…์Šค(M)๋ฅผ ์ž ๊ทผ๋‹ค.
        ๊ณต์œ ๋ฒ„ํผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. // ์ž„๊ณ„๊ตฌ์—ญ ์ฝ”๋“œ
        ๋ฎคํ…์Šค(M)์„ ์—ฐ๋‹ค.
        
        V(R); // ์„ธ๋งˆํฌ์–ด R์— ๋Œ€ํ•ด V/signal ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ฒ„ํผ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” Consumer๋ฅผ ๊นจ์šด๋‹ค.
     }
}

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