pthread_spin_init(3) - wariua/manpages-ko GitHub Wiki
pthread_spin_init, pthread_spin_destroy - ์คํ๋ฝ ์ด๊ธฐํ ๋ฐ ํ๊ธฐ
#include <pthread.h>
int pthread_spin_init(pthread_spinlock_t *lock, int pshared);
int pthread_spin_destroy(pthread_spinlock_t *lock);
-pthread
๋ก ์ปดํ์ผ ๋ฐ ๋งํฌ.
glibc ๊ธฐ๋ฅ ํ์ธ ๋งคํฌ๋ก ์๊ฑด (feature_test_macros(7) ์ฐธ๊ณ ):
-
pthread_spin_init()
,pthread_spin_destroy()
: _POSIX_C_SOURCE >= 200112L
์ผ๋ฐ์ ์ฃผ์ ์ฌํญ: ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋จธ๋ ์คํ๋ฝ ๋์ ๋ฎคํ ์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ์คํ๋ฝ์ ์ฃผ๋ก ์ค์๊ฐ ์ค์ผ์ค๋ง ์ ์ฑ ๊ณผ ์ฐ๊ด๋์ด ์ธ๋ชจ๊ฐ ์๋ค. NOTES ์ฐธ๊ณ .
pthread_spin_init()
ํจ์๋ lock
์ด ๊ฐ๋ฆฌํค๋ ์คํ๋ฝ์ ์ฌ์ฉํ๊ธฐ ์ํด ํ์ํ ์์์ ํ ๋นํ๊ณ ๊ทธ ๋ฝ์ ์ ๊ธฐ์ง ์์ ์ํ๋ก ์ด๊ธฐํ ํ๋ค. pshared
์ธ์๋ ๋ค์ ๊ฐ๋ค ์ค ํ๋์ฌ์ผ ํ๋ค.
PTHREAD_PROCESS_PRIVATE
-
pthread_spin_init()
์ ํธ์ถํ๋ ์ค๋ ๋์ ๊ฐ์ ํ๋ก์ธ์ค ๋ด์ ์๋ ์ค๋ ๋๋ง ๊ทธ ์คํ๋ฝ์ ์กฐ์ํ๊ฒ ๋์ด ์๋ค. (ํ๋ก์ธ์ค ๊ฐ์ ๊ทธ ์คํ๋ฝ์ ๊ณต์ ํ๋ ค๋ ์๋์ ๊ฒฐ๊ณผ๋ ๊ท์ ๋์ด ์์ง ์๋ค.) PTHREAD_PROCESS_SHARED
- ๋ฝ์ ๋ด์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผ๊ถ์ด ์๋ ๋ชจ๋ ํ๋ก์ธ์ค์ ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ทธ ์คํ๋ฝ์ ์กฐ์ํ ์ ์๋ค. (์ฆ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ํ๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ฒด ๋ด์ ๋ฝ์ด ์์ ์ ์๋ค.)
์ด๋ฏธ ์ด๊ธฐํ ๋ ์คํ๋ฝ์ pthread_spin_init()
์ ํธ์ถํ๋ ๊ฒฐ๊ณผ๋ ๊ท์ ๋์ด ์์ง ์๋ค.
pthread_spin_destroy()
ํจ์๋ ์์ ์ด๊ธฐํ ํ ์คํ๋ฝ์ ํ๊ธฐํ๊ณ ๊ทธ ๋ฝ์ ์ํด ํ ๋นํ๋ ์์์ ํด์ ํ๋ค. ์์ ์ด๊ธฐํ ํ์ง ์์ ์คํ๋ฝ์ ํ๊ธฐํ๊ฑฐ๋ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๋ฝ์ ์ก๊ณ ์๋ ๋์ ์คํ๋ฝ์ ํ๊ธฐํ๋ ๊ฒฐ๊ณผ๋ ๊ท์ ๋์ด ์์ง ์๋ค.
์คํ๋ฝ์ ํ๊ธฐํ๊ณ ๋์ pthread_spin_init()
์ผ๋ก ๋ค์ ์ด๊ธฐํ ํ๋ ๊ฒ ์ธ์ ๋ฝ์ ์ด๋ค ์์
์ด๋ ์ํํ๋ ๊ฒฐ๊ณผ๋ ๊ท์ ๋์ด ์์ง ์๋ค.
lock
์ด ๊ฐ๋ฆฌํค๋ ๊ฐ์ฒด์ ์ฌ๋ณธ์ pthread_spin_lock(3), pthread_spin_unlock(3), pthread_spin_destroy()
๊ฐ์ ์์
์ ์ํํ๋ ๊ฒฐ๊ณผ๋ ๊ท์ ๋์ด ์์ง ์๋ค.
์ฑ๊ณต ์ ์ด ํจ์๋ค์ 0์ ๋ฐํํ๋ค. ์คํจ ์ ์ค๋ฅ ๋ฒํธ๋ฅผ ๋ฐํํ๋ค. pthread_spin_init()
์ด ์คํจํ๋ ๊ฒฝ์ฐ ๋ฝ์ด ์ด๊ธฐํ ๋์ด ์์ง ์๋ค.
pthread_spin_init()
์ด ๋ค์ ์ค๋ฅ๋ก ์คํจํ ์ ์๋ค.
EAGAIN
- ์์คํ ์ ์ ์คํ๋ฝ์ ์ด๊ธฐํ ํ๊ธฐ์ ์ถฉ๋ถํ ์์์ด ์๋ค.
ENOMEM
- ์คํ๋ฝ์ ์ด๊ธฐํ ํ๊ธฐ์ ์ถฉ๋ถํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ค.
glibc ๋ฒ์ 2.2์์ ์ด ํจ์๋ค์ด ์ฒ์ ๋ฑ์ฅํ๋ค.
POSIX.1-2001.
ํ๋ก์ธ์ค ๊ณต์ ์คํ๋ฝ ์ง์์ POSIX ์ต์ ์ด๋ค. glibc ๊ตฌํ์์ ๊ทธ ์ต์ ์ ์ง์ํ๋ค.
์คํ๋ฝ์ ์ค์๊ฐ ์ค์ผ์ค๋ง ์ ์ฑ
(SCHED_FIFO
, ๊ทธ๋ฆฌ๊ณ ์๋ง SCHED_RR
)๊ณผ ํจ๊ป ์ฌ์ฉํด์ผ ํ๋ค. ์คํ๋ฝ์ SCHED_OTHER
๊ฐ์ ๋น๊ฒฐ์ ์ ์ค์ผ์ค๋ง ์ ์ฑ
๊ณผ ํจ๊ป ์ฐ๋ ๊ฒ์ ์๋ง๋ ์ค๊ณ ์ค์์ผ ๊ฒ์ด๋ค. ๊ทธ๋ฐ ์ ์ฑ
ํ์์ ๋์ํ๋ ์ค๋ ๋๊ฐ ์คํ๋ฝ์ ์ก๊ณ ์๋ ๋์ ์ค์ผ์ค์์ ์ ์ธ๋๋ฉด ๋ค์ ์ค์ผ์ค ๋์ด ๋ฝ์ ๋์ ๋๊น์ง ๋ค๋ฅธ ์ค๋ ๋๋ค์ด ๋ฝ์ ๋งด๋๋ฉด์ ์๊ฐ์ ๋ญ๋นํ๊ฒ ๋๋ค.
์คํ๋ฝ์ ์ฌ์ฉํ๋ ๋์ ์ค๋ ๋๋ค์ด ๊ต์ฐฉ ์ํฉ์ ๋ง๋ค๋ฉด ๊ทธ ์ค๋ ๋๋ค์ด ์์ํ ๋งด๋๋ฉฐ CPU ์๊ฐ์ ์๋ชจํ๊ฒ ๋๋ค.
์ฌ์ฉ์ ๊ณต๊ฐ ์คํ๋ฝ์ ๋ฒ์ฉ ๋ฝํน ํด๋ฒ์ผ๋ก ์ ์ฉ ๊ฐ๋ฅํ์ง ์๋ค. ๊ทธ ์ ์์ ์ฐ์ ์์ ์ญ์ ๊ณผ ์ ํ ์๋ ๋งด๋๊ธฐ ์๊ฐ์ ์ ๋ฐํ๊ธฐ ์ฝ๋ค. ์คํ๋ฝ์ ์ฐ๋ ค๋ ํ๋ก๊ทธ๋๋จธ๋ ์ฝ๋๋ฟ๋ง ์๋๋ผ ์์คํ ๊ตฌ์ฑ, ์ค๋ ๋ ๋ฐฐ์น, ์ฐ์ ์์ ๋ถ์ฌ ์ธก๋ฉด์์๋ ํน๋ณํ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผ ํ๋ค.
pthread_mutex_init(3), pthread_mutex_lock(3), pthread_spin_lock(3), pthread_spin_unlock(3), pthreads(7)
2017-09-30