pthread_attr_setstack(3) - wariua/manpages-ko GitHub Wiki
pthread_attr_setstack, pthread_attr_getstack - μ€λ λ μμ± κ°μ²΄μ μ€ν μμ± μ€μ νκΈ°/μ»κΈ°
#include <pthread.h>
int pthread_attr_setstack(pthread_attr_t *attr,
void *stackaddr, size_t stacksize);
int pthread_attr_getstack(const pthread_attr_t *attr,
void **stackaddr, size_t *stacksize);
-pthread
λ‘ μ»΄νμΌ λ° λ§ν¬.
glibc κΈ°λ₯ νμΈ λ§€ν¬λ‘ μ건 (feature_test_macros(7) μ°Έκ³ ):
-
pthread_attr_getstack()
,pthread_attr_setstack()
: _POSIX_C_SOURCE >= 200112L
pthread_attr_setstack()
ν¨μλ attr
μ΄ κ°λ¦¬ν€λ μ€λ λ μμ± κ°μ²΄μ μ€ν μ£Όμ λ° μ€ν ν¬κΈ° μμ±μ κ°κ° stackaddr
λ° stacksize
μ μ§μ ν κ°λ€λ‘ μ€μ νλ€. μ΄ μμ±λ€μ μ€λ λ μμ± κ°μ²΄ attr
μ μ΄μ©ν΄ μμ±νλ μ€λ λμμ μ¬μ©ν μ€νμ μμΉμ ν¬κΈ°λ₯Ό λνλΈλ€.
stackaddr
μ νΈμΆμκ° ν λΉν stacksize
λ°μ΄νΈμ§λ¦¬ λ²νΌμμ κ°μ₯ μλ μ£Όμμ λ°μ΄νΈλ₯Ό κ°λ¦¬μΌμΌ νλ€. ν λΉν λ²νΌμ νμ΄μ§λ€μ μ½κΈ°μ μ°κΈ°κ° λͺ¨λ κ°λ₯ν΄μΌ νλ€.
pthread_attr_getstack()
ν¨μλ attr
μ΄ κ°λ¦¬ν€λ μ€λ λ μμ± κ°μ²΄μ μ€ν μ£Όμ λ° μ€ν ν¬κΈ° μμ±μ κ°κ° stackaddr
λ° stacksize
κ° κ°λ¦¬ν€λ λ²νΌλ‘ λ°ννλ€.
μ±κ³΅ μ μ΄ ν¨μλ€μ 0μ λ°ννλ€. μ€λ₯ μ 0 μλ μ€λ₯ λ²νΈλ₯Ό λ°ννλ€.
pthread_attr_setstack()
μ΄ λ€μ μ€λ₯λ‘ μ€ν¨ν μ μλ€.
EINVAL
-
stacksize
κ°PTHREAD_STACK_MIN
(16384)λ°μ΄νΈλ³΄λ€ μλ€. μΌλΆ μμ€ν μμλstackaddr
μ΄λstackaddr + stacksize
κ° μ¬λ°λ‘ μ λ ¬λμ΄ μμ§ μμ κ²½μ°μλ μ΄ μ€λ₯κ° λ°μν μ μλ€.
POSIX.1μμλ stackaddr
λ° stacksize
κ° κΈ°μ νλ μ€νμ΄ νΈμΆμμκ² μ½κΈ°μ μ°κΈ° λͺ¨λ κ°λ₯νμ§ μμ κ²½μ° EACCES
μ€λ₯λ μ κ³ μλ€.
glibc λ²μ 2.2λΆν° μ΄ ν¨μλ€μ μ 곡νλ€.
μ΄ μ μμ μ¬μ©νλ μ©μ΄λ€μ λν μ€λͺ μ attributes(7)λ₯Ό 보λΌ.
μΈν°νμ΄μ€ | μμ± | κ° |
---|---|---|
pthread_attr_setstack() ,pthread_attr_getstack()
|
μ€λ λ μμ μ± | MT-Safe |
POSIX.1-2001, POSIX.1-2008.
μ΄ ν¨μλ€μ μ€λ λμ μ€νμ΄ νΉμ μμΉμ μλλ‘ ν΄μΌ νλ μμ©λ€μ μν κ²μ΄λ€. λλΆλΆ μμ©μμλ κ·Έλ΄ νμκ° μμΌλ―λ‘ μ΄ ν¨μλ€μ μ°μ§ μλ κ² μ’λ€. (μμ©μμ νμν κ² κΈ°λ³Έκ³Ό λ€λ₯Έ μ€ν ν¬κΈ°μΌ λΏμ΄λΌλ©΄ pthread_attr_setstacksize(3)λ₯Ό μ°λ©΄ λλ€.)
μμ©μμ pthread_attr_setstack()
μ μ΄μ©ν λλ μ€νμ ν λΉν μ±
μμ ν¨κ» κ°μ Έκ°λ€. pthread_attr_setguardsize(3)λ‘ μ€μ ν λ°©νΈ κ΅¬μ ν¬κΈ° κ°μ΄ 무μλλ€. νμμ μ€ν μ€λ²νλ‘μ° κ°λ₯μ±μ λμ²νκΈ° μν΄ λ°©νΈ κ΅¬μ(μ½κΈ° λ° μ°κΈ°κ° μ λκ² λ³΄νΈλ ν κ° μ΄μμ νμ΄μ§)μ ν λΉνλ κ²μ μμ©μ λͺ«μ΄λ€.
stackaddr
λ‘ μ§μ νλ μ£Όμκ° μ μ ν μ λ ¬λμ΄ μλ κ² μ’λ€. μμ ν μ΄μμ±μ μν΄μ νμ΄μ§ κ²½κ³(sysconf(_SC_PAGESIZE)
)μ λ§μΆ° μ λ ¬νλ©΄ λλ€. ν λΉμ posix_memalign(3)μ΄ λμμ΄ λ μ μλ€. stacksize
μμλ μμ€ν
νμ΄μ§ ν¬κΈ°μ λ°°μλ‘ νλ κ² μ’μ κ²μ΄λ€.
attr
μ μ¬μ©ν΄ μ¬λ¬ μ€λ λλ₯Ό μμ±νλ κ²½μ°μ νΈμΆμλ pthread_create(3) νΈμΆλ€ κ°μ μ€ν μ£Όμ μμ±μ λ°κΏ μ£Όμ΄μΌ νλ€. μ κ·Έλ¬λ©΄ μ¬λ¬ μ€λ λκ° κ°μ λ©λͺ¨λ¦¬ ꡬμμ μ€νμΌλ‘ μ°λ €κ³ νλ©΄μ νΌλμ΄ λ€λ°λ₯Ό κ²μ΄λ€.
pthread_attr_init(3) μ°Έκ³ .
mmap(2), mprotect(2), posix_memalign(3), pthread_attr_init(3), pthread_attr_setguardsize(3), pthread_attr_setstackaddr(3), pthread_attr_setstacksize(3), pthread_create(3), pthreads(7)
2017-09-15