# System Programming

# EX4.1 - Producer & Consumer in Pthreads

๊ณต์œ ํ•˜๋Š” data resource๋ฅผ linked list ํ˜•ํƒœ ์ž‘์„ฑํ•˜๊ธฐ

  • linked list ํ˜•์‹์˜ Intํ˜• buffer queue
  • Producer์™€ Consumer๋Š” linked list ๊ณต์œ 
  • linked list structure
    1. insert item : linked list์˜ node ํ•˜๋‚˜ ์ถ”๊ฐ€
    2. get item : linked list๋กœ๋ถ€ํ„ฐ node๋ฅผ ํ•˜๋‚˜ ๊ฐ€์ ธ์˜ค๊ณ  ๊ทธ ๋…ธ๋“œ๋ฅผ linked list์—์„œ ์ œ๊ฑฐ
    3. is empty : linked list๊ฐ€ ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ
    4. is full : linked list๊ฐ€ ๊ฐ€๋“์ฐผ๋Š”์ง€ ํ™•์ธ
  • mutex ๋ฐ ์กฐ๊ฑด ๋ณ€์ˆ˜ (condition variable) ๋™๊ธฐํ™”
  • ์ตœ๋Œ€ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋Š” 100๊ฐœ

Producer

1. linked list๊ฐ€ ๊ฐ€๋“ ์ฐฌ ๊ฒฝ์šฐ wait (condition wait)
2. ์ถ”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉด, integer ๊ฐ’์€ ๋žœ๋ค ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ƒ์„ฑํ•˜์—ฌ linked list์— ์ถ”๊ฐ€
3. ์–ด๋Š ์ •๋„ ์‹œ๊ฐ„ usleep (10 ms ์ •๋„)
4. ๋ฐ˜๋ณต

Consumer

1. linked list๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด wait
2.  ๊ฐ€์ ธ ์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฉด, get item์„ ํ†ตํ•ด linked list์— ์žˆ๋Š” data๋ฅผ ๊ฐ€์ ธ์˜ด
3.  console์— ๊ฐ€์ ธ์˜จ data ์ถœ๋ ฅ
4. ์–ด๋Š ์ •๋„ ์‹œ๊ฐ„ usleep (10 ms ์ •๋„)
5. ๋ฐ˜๋ณต
  • ์—ฐ์Šต ๋ฌธ์ œ ํ•ด์„

    1. mutex(๋ฎคํ…์Šค)์™€ conditions(์กฐ๊ฑด ๋ณ€์ˆ˜)๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    2. ๋ฐฐ์—ด ๋ฒ„ํผ๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ํ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค.
    3. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ํ์—๋Š” head, tail ํฌ์ธํ„ฐ์™€ ์ „์ฒด ๊ฐœ์ˆ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋Š” number_of_item ๋ณ€์ˆ˜๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
    4. number_of_items๊ฐ€ 100์ด๋ฉด ํ๊ฐ€ ๊ฝ‰ ์ฐฌ ๊ฑธ๋กœ ํ•˜๊ณ , 0์ด๋ฉด ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
    5. ์ƒ์‚ฐ์ž๋Š” ํŠน์ • ํŒŒ์ผ์„ ์—ด์–ด ํ•œ ๋ฌธ์ž์—ด์„ ์ฝ๊ณ , ํŒŒ์ผ์˜ ๋(EOF)์— ๋‹ค๋‹ค๋ฅผ ๋•Œ ๊นŒ์ง€ ํ•œ ๋ฌธ์ž์”ฉ ์ฝ์–ด ํ์— ์‚ฝ์ž… ํ•œ๋‹ค. ๋˜ํ•œ EOF์— ๋‹ค๋‹ค๋ฅด๋ฉด ์†Œ๋น„์ž์—๊ฒŒ โ€œENDโ€ ์‹œ๊ทธ๋„์„ ๋ณด๋‚ธ๋‹ค.
    6. ์†Œ๋น„์ž๋Š” ํ์—์„œ ํ•œ ๋ฌธ์ž์”ฉ ๋นผ๋ฉด์„œ ์ถœ๋ ฅํ•˜๋˜, ์ƒ์‚ฐ์ž๊ฐ€ โ€œENDโ€ ์‹œ๊ทธ๋„์„ ๋ณด๋‚ด๊ธฐ ์ „๊นŒ์ง€ ๋™์ž‘ํ•œ๋‹ค.
Last Updated: 6/18/2023, 2:13:15 PM