# System Programming
# EX4.1 - Producer & Consumer in Pthreads
๊ณต์ ํ๋ data resource๋ฅผ linked list ํํ ์์ฑํ๊ธฐ
- linked list ํ์์ Intํ buffer queue
- Producer์ Consumer๋ linked list ๊ณต์
- linked list structure
- insert item : linked list์ node ํ๋ ์ถ๊ฐ
- get item : linked list๋ก๋ถํฐ node๋ฅผ ํ๋ ๊ฐ์ ธ์ค๊ณ ๊ทธ ๋ ธ๋๋ฅผ linked list์์ ์ ๊ฑฐ
- is empty : linked list๊ฐ ๋น์ด์๋์ง ํ์ธ
- 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. ๋ฐ๋ณต
์ฐ์ต ๋ฌธ์ ํด์
- mutex(๋ฎคํ ์ค)์ conditions(์กฐ๊ฑด ๋ณ์)๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
- ๋ฐฐ์ด ๋ฒํผ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ํ๋ก ๋ณ๊ฒฝํ์ฌ ๊ตฌํํ๋ค.
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ ํ์๋ head, tail ํฌ์ธํฐ์ ์ ์ฒด ๊ฐ์๋ฅผ ์ ์ ์๋ number_of_item ๋ณ์๊ฐ ์์ด์ผ ํ๋ค.
- number_of_items๊ฐ 100์ด๋ฉด ํ๊ฐ ๊ฝ ์ฐฌ ๊ฑธ๋ก ํ๊ณ , 0์ด๋ฉด ๊ธฐ๋ค๋ฆฐ๋ค.
- ์์ฐ์๋ ํน์ ํ์ผ์ ์ด์ด ํ ๋ฌธ์์ด์ ์ฝ๊ณ , ํ์ผ์ ๋(EOF)์ ๋ค๋ค๋ฅผ ๋ ๊น์ง ํ ๋ฌธ์์ฉ ์ฝ์ด ํ์ ์ฝ์ ํ๋ค. ๋ํ EOF์ ๋ค๋ค๋ฅด๋ฉด ์๋น์์๊ฒ โENDโ ์๊ทธ๋์ ๋ณด๋ธ๋ค.
- ์๋น์๋ ํ์์ ํ ๋ฌธ์์ฉ ๋นผ๋ฉด์ ์ถ๋ ฅํ๋, ์์ฐ์๊ฐ โENDโ ์๊ทธ๋์ ๋ณด๋ด๊ธฐ ์ ๊น์ง ๋์ํ๋ค.
โ Spring boot System Programming โ