๐ ๋คํธ์ํฌํ๋ก๊ทธ๋๋ฐ 19 20์ฅ ์ ๋ฆฌ
19์ฅ Windows์์์ ์ฐ๋ ๋ ์ฌ์ฉ
์ด์์ฒด์ ๊ฐ ๋ง๋๋ ๋ฆฌ์์ค์ ์ ํ
- ํ๋ก๊ทธ๋จ์ ์คํ๊ณผ ๊ด๋ จ๋ ํ๋ก์ธ์ค์ ์ฐ๋ ๋
- ์ ์ถ๋ ฅ์ด ๋๊ตฌ๊ฐ ๋๋ ์์ผ๊ณผ ํ์ผ
- ์ฐ๋ ๋๊ฐ ๋๊ธฐํ์ ๋๊ตฌ๋ก ์ฌ์ฉ๋๋ ์ธ๋งํฌ์ด ๋ฎคํ ์ค
์ปค๋ ์ค๋ธ์ ํธ
: ๋ฆฌ์์ค ๊ด๋ฆฌ๋ฅผ ์ํด ์ด์์ฒด์ ๊ฐ ๋ง๋๋ ๋ฐ์ดํฐ ๋ธ๋ก
- ํด๋น ๋ฆฌ์์ค์ ์ ๋ณด๊ฐ ์ ์ฅ๋์ด์์
- ๋ฆฌ์์ค์ ์ข ๋ฅ์๋ฐ๋ผ ๋ค์ํ ํํ๋ก ์์ฑ
- ์์ฑ, ๊ด๋ฆฌ, ์๋ฉธ์ ์ด์์ฒด์ ๊ฐ ๋ด๋น (์์ ์ = ์ด์์ฒด์ )
์๋์ฐ ๊ธฐ๋ฐ์ ์ฐ๋ ๋ ์์ฑ
์ฐ๋ ๋์ ํ๋ก์ธ์ค์ ๊ด๊ณ
- main ํจ์ ํธ์ถ์ ์ฐ๋ ๋์ ์ํด ์คํ
- ๋จ์ผ ์ฐ๋ ๋ : ํ๋์ ์ฐ๋ ๋๋ง ์คํ (์ถ๊ฐ๋ก ์ฐ๋ ๋๋ฅผ ์์ฑx)
- ๋ฉํฐ ์ฐ๋ ๋ : ์ถ๊ฐ๋ก ์ฐ๋ ๋๋ฅผ ์์ฑ -> ๋ณ๋ ฌ์ฒ๋ฆฌ
ํ๋ก์ธ์ค : ์ด์์ฒด์ ๋ก๋ถํฐ ์์์ ํ ๋น๋ฐ์ ์์ ์ ๋จ์
์ฐ๋ ๋ : ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ฐ์ ์์์ ์ด์ฉํ๋ ์คํ ํ๋ฆ์ ๋จ์
CreateThread : ์๋์ฐ์์ ์ฐ๋ ๋ ์์ฑ
- lpStartAddress : ์ฐ๋ ๋์ main ํจ์์ ๋ณด ์ ๋ฌ
- lpParameter : ์ฐ๋ ๋์ main ํจ์ ํธ์ถ ์ ์ ๋ฌํ ์ธ์์ ๋ณด ์ ๋ฌ
C/C++ ํจ์์ ํธ์ถ์ด ํ์ํ ํ๋ก๊ทธ๋จ ์์ฑ์ -> beginthreadex ์ฌ์ฉ
์๋์ฐ์ ์ฐ๋ ๋๋ ์ฐ๋ ๋ ํจ์ ๋ฐํ ์ ์๋ ์๋ฉธ
์ปค๋ ์ค๋ธ์ ํธ์ ๋๊ฐ์ง ์ํ
non-signaled ์ํ : ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ง ์์ ์ํ, ํด๋น ๋ฆฌ์์ค๊ฐ ํน์ ์ํฉ์ ์ด๋ฅด์ง ์์ ์ํ
signaled ์ํ : ์ด๋ฒคํธ ๋ฐ์ ์ํ, ํด๋น ๋ฆฌ์์ค๊ฐ ํน์ ์ํฉ ๋๋ฌ ์ํ
-> ์ปค๋ ์ค๋ธ์ ํธ์ ์ํ ์ ๋ณด๋ฅผ ํตํด ๋ฆฌ์์ค์ ์ํฉ์ ์ธ์ํจ
ex. ํ๋ก์ธ์ค๋ ์ฐ๋ ๋์ ์ปค๋ ์ค๋ธ์ ํธ๋ ํ๋ก์ธ์ค, ์ฐ๋ ๋ ์์ฑ์ non-signaled ์ํ์ ์๋ค๊ฐ, ์ข ๋ฃ ์์ signaled ์ํ
์ปค๋ ์ค๋ธ์ ํธ์ ์ํ ํ์ธ
์ ๋ฌ๋ ํธ๋ค์ ์ปค๋ ์ค๋ธ์ ํธ๊ฐ signaled ์ํ๊ฐ ๋์ด์ผ ํจ์ ๋ฐํ
์ํ ํ์ธ ํจ์์ ๋ฐํ๊ฐ
- WAIT_OBJECT_0: ์ปค๋ ์ค๋ธ์ ํธ๊ฐ signaled ์ํ์ผ ๋ ๋ฐํ
- auto-reset ๋ชจ๋: signaled ์ํ์์ ํจ์ ๋ฐํ ํ ์๋์ผ๋ก non-signaled๋ก ์ ํ
- manual-reset ๋ชจ๋: ์๋์ผ๋ก ์ํ๋ฅผ ๋ณ๊ฒฝํด์ผ ํจ
20์ฅ Windows์์์ ์ฐ๋ ๋ ๋๊ธฐํ
์ ์ ๋ชจ๋์ ์ปค๋๋ชจ๋
์ ์ ๋ชจ๋
- ์์ฉ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๊ธฐ๋ณธ ๋ชจ๋
- ๋ฌผ๋ฆฌ์ ์ธ ์์ญ์ผ๋ก์ ์ ๊ทผ์ด ํ์ฉ๋์ง ์์
- ์ ๊ทผํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ญ์๋ ์ ํ
- ํ๋ก๊ทธ๋จ์ ์คํ์ ์ ํ์ ๋๊ธฐ ์ํ ๋ชจ๋
์ปค๋๋ชจ๋
- ์ด์์ฒด์ ๊ฐ ์คํ๋ ๋์ ๋ชจ๋
- ๋ฉ๋ชจ๋ฆฌ๋ ํ๋์จ์ด์ ์ ๊ทผ์๋ ์ ํ์ด ์์
๊ฐ์ ์ด์์ฒด์ ์ ์ํด์ ์์ฑ๋๋ ์ฐ์ฐ์ ์ํด์๋ ์ ์ ๋ชจ๋์์ ์ปค๋๋ชจ๋๋ก์ ์ ํ, ์ปค๋๋ชจ๋์์ ์ ์ ๋ชจ๋๋ก์ ์ ํ์ด ํ์ํจ
์ ์ ๋ชจ๋ ๋๊ธฐํ์ ์ปค๋๋ชจ๋ ๋๊ธฐํ
์ ์ ๋ชจ๋ ๋๊ธฐํ
- ์ด์์ฒด์ ์์ ์ด๋ฃจ์ด์ง๋ ๋๊ธฐํ๊ฐ ์๋, ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํด์ ์์ฑ๋๋ ๋๊ธฐํ ๊ธฐ๋ฒ
- ์ด์์ฒด์ ์ ์ํด ์ ๊ณต๋์ง ์์ผ๋ฏ๋ก ์ปค๋๋ชจ๋๋ก์ ์ ํ์ด ๋ถํ์
- ์๋์ ์ผ๋ก ๊ฐ๋ณ๊ณ ์๋๊ฐ ๋น ๋ฆ
- CRITICAL_SECTION
- ์๊ณ์์ญ์ EnterCri~ ํจ์์ LeaveCri~ ํจ์๋ก ๊ฐ์ผ๋ค
- InitializerCriticalSection : ์์ฑ
- DeleteCriticalSection : ์๋ฉธ
- EnterCriticalSection : ํ๋
- LeaveCriticalSection : ๋ฐ๋ฉ
์ปค๋๋ชจ๋ ๋๊ธฐํ
- ์ปค๋์ ์ํด ์ ๊ณต๋๋ ๋๊ธฐํ ๊ธฐ๋ฒ
- ๋ค์ํ ๊ธฐ๋ฅ ์ ๊ณต (ex. ํ์์์ ์ง์ ๊ฐ๋ฅ)
- Mutex
- auto-reset ๋ชจ๋
- ์ค๋ธ์ ํธ์ ์๋ฉธ ์ CloseHandle ํจ์ ํธ์ถ
- WaitForSingleObject ํจ์ ์ด์ฉ
- ํ๋ ๊ฐ๋ฅํ ์ํ๊ฐ ๋๋ฉด, signaled ์ํ
- ๋๋ฒ์งธ ์ธ์๋ก True์ ๋ฌ ์ non-signaled, False์ signaled
- WaitForSingleObject ~ ReleaseMutex
- Semaphore
- ์ธ๋งํฌ์ด ๊ฐ์ด 0์ธ ๊ฒฝ์ฐ non-signaled ์ํ, 0๋ณด๋ค ํฐ ๊ฒฝ์ฐ signaled ์ํ
- ์ธ๋งํฌ์ด ๊ฐ์ 0๋ณด๋ค ์์์ง ์ ์๋ค
- ์ค๋ธ์ ํธ์ ์๋ฉธ ์ CloseHandle ํจ์ ํธ์ถ
- ์ธ๋งํฌ์ด์ ์ด๊ธฐ๊ฐ ์ค์ -> ์๊ณ์์ญ์ ์ ๊ทผ๊ฐ๋ฅ ํ ์ฐ๋ ๋์ ์ ์ ํ
- ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์ -> ์ธ๋งํฌ์ด ์ด๊ธฐ ๊ฐ
- ์ธ ๋ฒ์งธ ๋งค๊ฐ๋ณ์ -> ์ธ๋งํฌ์ด ์ต๋ ๊ฐ
- WaitForSingleObject ํจ์ ์ด์ฉ
- WaitForSingleObject ~ ReleaseSemaphore
- Event
- manual-reset + auto-reset ๋ชจ๋ ๊ฐ๋ฅ
- ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์ True -> manual-reset / False -> auto-rest
- ์ธ ๋ฒ์งธ ๋งค๊ฐ๋ณ์ True -> auto-reset / False -> manual-reset
- manual-reset ๋ชจ๋๋ก ์์ฑ ์ ์ํ ๋ณ๊ฒฝ
- ResetEvent -> non-signaled
- SetEvent -> signaled