Futex

ยท 350 words ยท 1 minute read

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 ๐Ÿ”—

  1. ์•„ํ† ๋ฏน ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ lock์„ ์‹œ๋„
  2. 1์—์„œ lock์ด ์„ฑ๊ณต๋˜๋ฉด ์ข…๋ฃŒ
  3. FUTEX_WAIT๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ pthread_mutex_t์˜ ์ฃผ์†Œ ์ƒ์—์„œ ์Šฌ๋ฆฝํ•œ๋‹ค
  4. ์‹œ๋™ ํ›„, 1๋กœ ๋Œ์•„๊ฐ„๋‹ค

pthread_mutex_unlock ๐Ÿ”—

  1. ์•„ํ† ๋ฏน ๋ช…๋ น์„ ์‚ฌ์šฉํ•ด unlock ์ฒ˜๋ฆฌ๋ฅผ ์‹ค์‹œ
  2. 1์˜ ๊ฒฐ๊ณผ, ์Šฌ๋ฆฝํ•˜๊ณ  ์žˆ๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด FUTEX_WAKE๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ wakeupํ•œ๋‹ค.

์ฐธ๊ณ  ๐Ÿ”—