Futex (Fast Userspace Mutexes) ๐
futex๋ ์ ํต์ ์ธ UNIX ์ปค๋์์ ์ฌ์ฉ๋๊ณ ์๋ sleep/wakup๊ณผ ๋งค์ฐ ๋น์ทํ ๋๊ธฐ ๊ธฐ๊ตฌ๋ฅผ userland์ ๋ํด ์ ๊ณตํ๋ค. ์ฃผ๋ก NPTL(Native POSIX Thread Library) ๋ฑ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ตฌํ์ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก๋ถํฐ ์ง์ ์ด์ฉํ๋ ๊ฒฝ์ฐ๋ ๋ณ๋ก ์๋ค๊ณ ์๊ฐ๋์ง๋ง POSIX Thread๋ Java ์ค๋ ๋์ ๊ตฌํ ๋ฑ์๋ ์ด์ฉ๋๊ณ ์์ด ๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๋ง์ด ์ด์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์๋ ์ด์ต์ด ์์ ๊ฒ์ด๋ค. futex ์์คํ ์ฝ์ ์ฃผ๋ ๊ธฐ๋ฅ์ FUTEX_WAIT์ FUTEX_WAKE์ด๋ค.
pthread_mutex_lock ๐
- ์ํ ๋ฏน ๋ช ๋ น์ ์ฌ์ฉํ์ฌ lock์ ์๋
- 1์์ lock์ด ์ฑ๊ณต๋๋ฉด ์ข ๋ฃ
- FUTEX_WAIT๋ฅผ ์ฌ์ฉํ์ฌ pthread_mutex_t์ ์ฃผ์ ์์์ ์ฌ๋ฆฝํ๋ค
- ์๋ ํ, 1๋ก ๋์๊ฐ๋ค
pthread_mutex_unlock ๐
- ์ํ ๋ฏน ๋ช ๋ น์ ์ฌ์ฉํด unlock ์ฒ๋ฆฌ๋ฅผ ์ค์
- 1์ ๊ฒฐ๊ณผ, ์ฌ๋ฆฝํ๊ณ ์๋ ์ค๋ ๋๊ฐ ์๋ค๋ฉด FUTEX_WAKE๋ฅผ ์ฌ์ฉํ์ฌ wakeupํ๋ค.