pthreads(7) - wariua/manpages-ko GitHub Wiki

NAME

pthreads - POSIX ์Šค๋ ˆ๋“œ

DESCRIPTION

POSIX.1์—์„œ๋Š” ์Šค๋ ˆ๋“œ ๋ฐฉ์‹ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•œ ์ผ๊ตฐ์˜ ์ธํ„ฐํŽ˜์ด์Šค(ํ•จ์ˆ˜, ํ—ค๋” ํŒŒ์ผ)๋ฅผ ๋ช…์„ธํ•˜๋Š”๋ฐ, ๋ณดํ†ต POSIX ์Šค๋ ˆ๋“œ ๋‚ด์ง€ Pthreads๋ผ๊ณ  ํ•œ๋‹ค. ํ•œ ํ”„๋กœ์„ธ์Šค ์•ˆ์— ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์–ด์„œ ๋ชจ๋‘ ๋™์ผ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•œ๋‹ค. ๊ทธ ์Šค๋ ˆ๋“œ๋“ค์€ ๋™์ผํ•œ ์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ(๋ฐ์ดํ„ฐ ๋ฐ ํž™ ์„ธ๊ทธ๋จผํŠธ)๋ฅผ ๊ณต์œ ํ•˜์ง€๋งŒ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๊ฐ์ž์˜ ์Šคํƒ(์ž๋™ ๋ณ€์ˆ˜)์ด ์žˆ๋‹ค.

POSIX.1์—์„œ๋Š” ์Šค๋ ˆ๋“œ๋“ค์ด ๋‹ค์–‘ํ•œ ๋‹ค๋ฅธ ์†์„ฑ๋“ค์„ ๊ณต์œ ํ•˜๊ธฐ๋ฅผ ์š”๊ตฌํ•œ๋‹ค. (์ฆ‰ ์ด ์†์„ฑ๋“ค์€ ์Šค๋ ˆ๋“œ ํ•œ์ •์ด ์•„๋‹ˆ๋ผ ํ”„๋กœ์„ธ์Šค ์ „์—ญ์ด๋‹ค.)

  • ํ”„๋กœ์„ธ์Šค ID

  • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค ID

  • ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน ID ๋ฐ ์„ธ์…˜ ID

  • ์ œ์–ด ํ„ฐ๋ฏธ๋„

  • ์‚ฌ์šฉ์ž ID ๋ฐ ๊ทธ๋ฃน ID

  • ์—ด๋ฆฐ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ

  • ๋ ˆ์ฝ”๋“œ ๋ฝ (fcntl(2))

  • ์‹œ๊ทธ๋„ ์ฒ˜๋ฆฌ ๋ฐฉ์‹

  • ํŒŒ์ผ ๋ชจ๋“œ ์ƒ์„ฑ ๋งˆ์Šคํฌ (umask(2))

  • ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ (chdir(2)) ๋ฐ ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ (chroot(2))

  • ๊ฐ„๊ฒฉ ํƒ€์ด๋จธ (setitimer(2)) ๋ฐ POSIX ํƒ€์ด๋จธ (timer_create(2))

  • ๋‚˜์ด์Šค ๊ฐ’ (setpriority(2))

  • ์ž์› ์ œํ•œ (setrlimit(2))

  • CPU ์‹œ๊ฐ„ (times(2)) ๋ฐ ์ž์› (getrusage(2)) ์†Œ๋ชจ ์ธก์ •์น˜

POSIX.1์—์„œ๋Š” ์Šคํƒ๋ฟ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ์†์„ฑ๋“ค์ด ์Šค๋ ˆ๋“œ๋ณ„๋กœ ๊ตฌ๋ถ„๋˜์–ด ์žˆ๋‹ค๊ณ  ๋ช…์„ธํ•œ๋‹ค.

  • ์Šค๋ ˆ๋“œ ID (pthread_t ๋ฐ์ดํ„ฐ ํƒ€์ž…)

  • ์‹œ๊ทธ๋„ ๋งˆ์Šคํฌ (pthread_sigmask(3))

  • errno ๋ณ€์ˆ˜

  • ๋Œ€์ฒด ์‹œ๊ทธ๋„ ์Šคํƒ (sigaltstack(2))

  • ์‹ค์‹œ๊ฐ„ ์Šค์ผ€์ค„๋ง ์ •์ฑ…๊ณผ ์šฐ์„ ์ˆœ์œ„ (sched(7))

๋‹ค์Œ ๋ฆฌ๋ˆ…์Šค ํ•œ์ • ์†์„ฑ๋“ค ์—ญ์‹œ ์Šค๋ ˆ๋“œ๋ณ„์ด๋‹ค.

pthreads ํ•จ์ˆ˜ ๋ฐ˜ํ™˜ ๊ฐ’

pthreads ํ•จ์ˆ˜ ๋Œ€๋ถ€๋ถ„์€ ์„ฑ๊ณต ์‹œ 0์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์‹คํŒจ ์‹œ ์˜ค๋ฅ˜ ๋ฒˆํ˜ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. pthreads ํ•จ์ˆ˜๋“ค์ด errno๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์— ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค. ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” pthreads ํ•จ์ˆ˜ ๊ฐ๊ฐ์— ๋Œ€ํ•ด POSIX.1-2001์—์„œ๋Š” ๊ทธ ํ•จ์ˆ˜๊ฐ€ ์ ˆ๋Œ€ EINTR ์˜ค๋ฅ˜๋กœ ์‹คํŒจํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ๋ช…์„ธํ•˜๊ณ  ์žˆ๋‹ค.

์Šค๋ ˆ๋“œ ID

ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ๊ฐ ์Šค๋ ˆ๋“œ์—๋Š” (pthread_t ํƒ€์ž…์— ์ €์žฅํ•˜๋Š”) ๊ณ ์œ ์˜ ์Šค๋ ˆ๋“œ ์‹๋ณ„์ž๊ฐ€ ์žˆ๋‹ค. pthread_create(3) ํ˜ธ์ถœ์ž์—๊ฒŒ ์ด ์‹๋ณ„์ž๊ฐ€ ๋ฐ˜ํ™˜๋˜๋ฉฐ pthread_self(3)๋กœ ์ž๊ธฐ ์Šค๋ ˆ๋“œ ์‹๋ณ„์ž๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

์Šค๋ ˆ๋“œ ID๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ๋งŒ ์œ ์ผ์„ฑ์ด ๋ณด์žฅ๋œ๋‹ค. (์Šค๋ ˆ๋“œ ID๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š” pthreads ํ•จ์ˆ˜ ๋ชจ๋‘์—์„œ ๊ทธ ID๋Š” ์ •์˜์ƒ ํ˜ธ์ถœ์ž์™€ ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.)

์ข…๋ฃŒ๋œ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•ฉ๋ฅ˜๋˜๊ฑฐ๋‚˜ ๋ถ„๋ฆฌ๋œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋œ ํ›„์— ์‹œ์Šคํ…œ์ด ์Šค๋ ˆ๋“œ ID๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. POSIX์—์„œ๋Š” "์ˆ˜๋ช…์ด ๋๋‚œ ์Šค๋ ˆ๋“œ ID๋ฅผ ์‘์šฉ์—์„œ ์‚ฌ์šฉํ•˜๋ ค ์‹œ๋„ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ๋™์ž‘ ๋ฐฉ์‹์€ ๊ทœ์ •๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค"๊ณ  ํ•œ๋‹ค.

์Šค๋ ˆ๋“œ ์•ˆ์ „ ํ•จ์ˆ˜

์Šค๋ ˆ๋“œ ์•ˆ์ „(thread-safe) ํ•จ์ˆ˜๋ž€ ๋™์‹œ์— ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ํ˜ธ์ถœํ•ด๋„ ์•ˆ์ „ํ•œ (์ฆ‰ ์–ด๋А ๊ฒฝ์šฐ๋“  ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋‚ด๋†“๋Š”) ํ•จ์ˆ˜์ด๋‹ค.

POSIX.1-2001๊ณผ POSIX.1-2008์—์„œ๋Š” ๋‹ค์Œ ํ•จ์ˆ˜๋“ค์„ ์ œ์™ธํ•˜๊ณ  ๊ทธ ํ‘œ์ค€์—์„œ ๋ช…์„ธํ•˜๋Š” ํ•จ์ˆ˜ ๋ชจ๋‘๊ฐ€ ์Šค๋ ˆ๋“œ ์•ˆ์ „์ด์–ด์•ผ ํ•œ๋‹ค๊ณ  ์š”๊ตฌํ•œ๋‹ค.

asctime()
basename()
catgets()
crypt()
ctermid() NULL ์•„๋‹Œ ์ธ์ž ์ค€ ๊ฒฝ์šฐ
ctime()
dbm_clearerr()
dbm_close()
dbm_delete()
dbm_error()
dbm_fetch()
dbm_firstkey()
dbm_nextkey()
dbm_open()
dbm_store()
dirname()
dlerror()
drand48()
ecvt() [POSIX.1-2001 ํ•œ์ • (POSIX.1-2008์—์„œ ์ œ๊ฑฐ)]
encrypt()
endgrent()
endpwent()
endutxent()
fcvt() [POSIX.1-2001 ํ•œ์ • (POSIX.1-2008์—์„œ ์ œ๊ฑฐ)]
ftw()
gcvt() [POSIX.1-2001 ํ•œ์ • (POSIX.1-2008์—์„œ ์ œ๊ฑฐ)]
getc_unlocked()
getchar_unlocked()
getdate()
getenv()
getgrent()
getgrgid()
getgrnam()
gethostbyaddr() [POSIX.1-2001 ํ•œ์ • (POSIX.1-2008์—์„œ ์ œ๊ฑฐ)]
gethostbyname() 
[POSIX.1-2001 ํ•œ์ • (POSIX.1-2008์—์„œ ์ œ๊ฑฐ)]
gethostent()
getlogin()
getnetbyaddr()
getnetbyname()
getnetent()
getopt()
getprotobyname()
getprotobynumber()
getprotoent()
getpwent()
getpwnam()
getpwuid()
getservbyname()
getservbyport()
getservent()
getutxent()
getutxid()
getutxline()
gmtime()
hcreate()
hdestroy()
hsearch()
inet_ntoa()
l64a()
lgamma()
lgammaf()
lgammal()
localeconv()
localtime()
lrand48()
mrand48()
nftw()
nl_langinfo()
ptsname()
putc_unlocked()
putchar_unlocked()
putenv()
pututxline()
rand()
readdir()
setenv()
setgrent()
setkey()
setpwent()
setutxent()
strerror()
strsignal() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
strtok()
system() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
tmpnam() NULL ์•„๋‹Œ ์ธ์ž ์ค€ ๊ฒฝ์šฐ
ttyname()
unsetenv()
wcrtomb() ๋งˆ์ง€๋ง‰ ์ธ์ž๊ฐ€ NULL์ธ ๊ฒฝ์šฐ
wcsrtombs() ๋งˆ์ง€๋ง‰ ์ธ์ž๊ฐ€ NULL์ธ ๊ฒฝ์šฐ
wcstombs()
wctomb()

๋น„๋™๊ธฐ ์ทจ์†Œ ์•ˆ์ „ ํ•จ์ˆ˜

๋น„๋™๊ธฐ ์ทจ์†Œ ์•ˆ์ „(async-cancel-safe) ํ•จ์ˆ˜๋ž€ ๋น„๋™๊ธฐ ์ทจ์†Œ ๊ฐ€๋Šฅ์„ฑ์ด ์ผœ์ ธ ์žˆ๋Š” ์‘์šฉ์—์„œ ํ˜ธ์ถœํ•ด๋„ ์•ˆ์ „ํ•œ ํ•จ์ˆ˜์ด๋‹ค. (pthread_setcancelstate(3) ์ฐธ๊ณ .)

POSIX.1-2001๊ณผ POSIX.1-2008์—์„œ๋Š” ๋‹ค์Œ ํ•จ์ˆ˜๋“ค๋งŒ ๋น„๋™๊ธฐ ์ทจ์†Œ ์•ˆ์ „์ด๊ธฐ๋ฅผ ์š”๊ตฌํ•œ๋‹ค.

pthread_cancel()
pthread_setcancelstate()
pthread_setcanceltype()

์ทจ์†Œ์ 

POSIX.1์—์„œ๋Š” ์–ด๋–ค ํ•จ์ˆ˜๋“ค์ด ์ทจ์†Œ์ ์ด์–ด์•ผ ํ•œ๋‹ค๊ณ , ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ๋‹ค๋ฅธ ํ•จ์ˆ˜๋“ค์€ ์ทจ์†Œ์ ์ผ ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ๋ช…์„ธํ•œ๋‹ค. ์Šค๋ ˆ๋“œ๊ฐ€ ์ทจ์†Œ ๊ฐ€๋Šฅํ•˜๊ณ , ์ทจ์†Œ ๊ฐ€๋Šฅ์„ฑ ์œ ํ˜•์ด ์—ฐ๊ธฐ์ด๋ฉฐ, ์Šค๋ ˆ๋“œ์— ์ทจ์†Œ ์š”์ฒญ์ด ๋Œ€๊ธฐ ์ค‘์ด๋ฉด ์ทจ์†Œ์ ์ธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ทจ์†Œ๋œ๋‹ค.

POSIX.1-2001 ๋ฐ/๋˜๋Š” POSIX.1-2008์—์„œ ๋‹ค์Œ ํ•จ์ˆ˜๋“ค์ด ์ทจ์†Œ์ ์ด๊ธฐ๋ฅผ ์š”๊ตฌํ•œ๋‹ค.

accept()
aio_suspend()
clock_nanosleep()
close()
connect()
creat()
fcntl() F_SETLKW
fdatasync()
fsync()
getmsg()
getpmsg()
lockf() F_LOCK
mq_receive()
mq_send()
mq_timedreceive()
mq_timedsend()
msgrcv()
msgsnd()
msync()
nanosleep()
open()
openat() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
pause()
poll()
pread()
pselect()
pthread_cond_timedwait()
pthread_cond_wait()
pthread_join()
pthread_testcancel()
putmsg()
putpmsg()
pwrite()
read()
readv()
recv()
recvfrom()
recvmsg()
select()
sem_timedwait()
sem_wait()
send()
sendmsg()
sendto()
sigpause() [POSIX.1-2001 ํ•œ์ • (POSIX.1-2008์—์„œ "๊ฐ€๋Šฅ" ๋ชฉ๋ก์œผ๋กœ ์ด๋™)]
sigsuspend()
sigtimedwait()
sigwait()
sigwaitinfo()
sleep()
system()
tcdrain()
usleep() [POSIX.1-2001 ํ•œ์ • (POSIX.1-2008์—์„œ ์ œ๊ฑฐ)]
wait()
waitid()
waitpid()
write()
writev()

POSIX.1-2001 ๋ฐ/๋˜๋Š” POSIX.1-2008์— ๋”ฐ๋ฅด๋ฉด ๋‹ค์Œ ํ•จ์ˆ˜๋“ค์ด ์ทจ์†Œ์ ์ผ ์ˆ˜๋„ ์žˆ๋‹ค.

access()
asctime()
asctime_r()
catclose()
catgets()
catopen()
chmod() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
chown() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
closedir()
closelog()
ctermid()
ctime()
ctime_r()
dbm_close()
dbm_delete()
dbm_fetch()
dbm_nextkey()
dbm_open()
dbm_store()
dlclose()
dlopen()
dprintf() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
endgrent()
endhostent()
endnetent()
endprotoent()
endpwent()
endservent()
endutxent()
faccessat() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
fchmod() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
fchmodat() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
fchown() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
fchownat() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
fclose()
fcntl() (๋ชจ๋“  cmd ์ธ์ž ๊ฐ’์— ๋Œ€ํ•ด)
fflush()
fgetc()
fgetpos()
fgets()
fgetwc()
fgetws()
fmtmsg()
fopen()
fpathconf()
fprintf()
fputc()
fputs()
fputwc()
fputws()
fread()
freopen()
fscanf()
fseek()
fseeko()
fsetpos()
fstat()
fstatat() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
ftell()
ftello()
ftw()
futimens() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
fwprintf()
fwrite()
fwscanf()
getaddrinfo()
getc()
getc_unlocked()
getchar()
getchar_unlocked()
getcwd()
getdate()
getdelim() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
getgrent()
getgrgid()
getgrgid_r()
getgrnam()
getgrnam_r()
gethostbyaddr() [SUSv3 ํ•œ์ • (POSIX.1-2008์—์„œ ์ œ๊ฑฐ)]
gethostbyname() [SUSv3 ํ•œ์ • (POSIX.1-2008์—์„œ ์ œ๊ฑฐ)]
gethostent()
gethostid()
gethostname()
getline() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
getlogin()
getlogin_r()
getnameinfo()
getnetbyaddr()
getnetbyname()
getnetent()
getopt() (opterr๊ฐ€ 0์ด ์•„๋‹Œ ๊ฒฝ์šฐ)
getprotobyname()
getprotobynumber()
getprotoent()
getpwent()
getpwnam()
getpwnam_r()
getpwuid()
getpwuid_r()
gets()
getservbyname()
getservbyport()
getservent()
getutxent()
getutxid()
getutxline()
getwc()
getwchar()
getwd() [SUSv3 ํ•œ์ • (POSIX.1-2008์—์„œ ์ œ๊ฑฐ)]
glob()
iconv_close()
iconv_open()
ioctl()
link()
linkat() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
lio_listio() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
localtime()
localtime_r()
lockf() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
lseek()
lstat()
mkdir() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
mkdirat() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
mkdtemp() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
mkfifo() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
mkfifoat() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
mknod() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
mknodat() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
mkstemp()
mktime()
nftw()
opendir()
openlog()
pathconf()
pclose()
perror()
popen()
posix_fadvise()
posix_fallocate()
posix_madvise()
posix_openpt()
posix_spawn()
posix_spawnp()
posix_trace_clear()
posix_trace_close()
posix_trace_create()
posix_trace_create_withlog()
posix_trace_eventtypelist_getnext_id()
posix_trace_eventtypelist_rewind()
posix_trace_flush()
posix_trace_get_attr()
posix_trace_get_filter()
posix_trace_get_status()
posix_trace_getnext_event()
posix_trace_open()
posix_trace_rewind()
posix_trace_set_filter()
posix_trace_shutdown()
posix_trace_timedgetnext_event()
posix_typed_mem_open()
printf()
psiginfo() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
psignal() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
pthread_rwlock_rdlock()
pthread_rwlock_timedrdlock()
pthread_rwlock_timedwrlock()
pthread_rwlock_wrlock()
putc()
putc_unlocked()
putchar()
putchar_unlocked()
puts()
pututxline()
putwc()
putwchar()
readdir()
readdir_r()
readlink() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
readlinkat() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
remove()
rename()
renameat() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
rewind()
rewinddir()
scandir() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
scanf()
seekdir()
semop()
setgrent()
sethostent()
setnetent()
setprotoent()
setpwent()
setservent()
setutxent()
sigpause() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
stat()
strerror()
strerror_r()
strftime()
symlink()
symlinkat() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
sync()
syslog()
tmpfile()
tmpnam()
ttyname()
ttyname_r()
tzset()
ungetc()
ungetwc()
unlink()
unlinkat() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
utime() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
utimensat() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
utimes() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
vdprintf() [POSIX-1.2008์—์„œ ์ถ”๊ฐ€]
vfprintf()
vfwprintf()
vprintf()
vwprintf()
wcsftime()
wordexp()
wprintf()
wscanf()

ํ‘œ์ค€์—์„œ ๋ช…์„ธํ•˜์ง€ ์•Š์€ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋“ค์„ ๊ตฌํ˜„์—์„œ ์ทจ์†Œ์ ์œผ๋กœ ๋‘˜ ์ˆ˜๋„ ์žˆ๋‹ค. ํŠนํžˆ ๋ธ”๋ก ํ•  ์ˆ˜ ์žˆ๋Š” ๋น„ํ‘œ์ค€ ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค๋ฉด ์•„๋งˆ ๊ตฌํ˜„์—์„œ ์ทจ์†Œ์ ์œผ๋กœ ๋‘˜ ๊ฒƒ์ด๋‹ค. (ํŒŒ์ผ์„ ๊ฑด๋“œ๋ฆด ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋“ค ๋Œ€๋ถ€๋ถ„์ด ์—ฌ๊ธฐ ํฌํ•จ๋œ๋‹ค.)

๋ฆฌ๋ˆ…์Šค์—์„œ ์ปดํŒŒ์ผ ํ•˜๊ธฐ

๋ฆฌ๋ˆ…์Šค์—์„œ Pthreads API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์€ cc -pthread๋ผ๊ณ  ์ปดํŒŒ์ผ ํ•ด์•ผ ํ•œ๋‹ค.

POSIX ์Šค๋ ˆ๋“œ์˜ ๋ฆฌ๋ˆ…์Šค ๊ตฌํ˜„

๊ทธ๊ฐ„ ๋ฆฌ๋ˆ…์Šค์˜ GNU C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋‘ ๊ฐ€์ง€ ์Šค๋ ˆ๋”ฉ ๊ตฌํ˜„์„ ์ œ๊ณตํ–ˆ๋‹ค.

LinuxThreads
์›๋ž˜ Pthreads ๊ตฌํ˜„์ด๋‹ค. glibc 2.4๋ถ€ํ„ฐ๋Š” ์ด ๊ตฌํ˜„์„ ๋” ์ด์ƒ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
NPTL (Native POSIX Threads Library)
์‹ ์‹ Pthreads ๊ตฌํ˜„์ด๋‹ค. LinuxThreads์™€ ๋น„๊ตํ•  ๋•Œ NPTL์€ POSIX.1 ๋ช…์„ธ ์š”๊ตฌ ์‚ฌํ•ญ๋“ค์„ ๋” ๊ฐ€๊น๊ฒŒ ์ค€์ˆ˜ํ•˜๋ฉฐ ์Šค๋ ˆ๋“œ๋ฅผ ๋‹ค์ˆ˜ ์ƒ์„ฑํ•  ๋•Œ ์„ฑ๋Šฅ์ด ๋” ์ข‹๋‹ค. glibc 2.3.2๋ถ€ํ„ฐ NPTL์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฆฌ๋ˆ…์Šค 2.6 ์ปค๋„์— ์žˆ๋Š” ๊ธฐ๋Šฅ๋“ค์„ ํ•„์š”๋กœ ํ•œ๋‹ค.

๋‘˜ ๋‹ค ์†Œ์œ„ 1:1 ๋ฐฉ์‹ ๊ตฌํ˜„์ด๋‹ค. ์ฆ‰ ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ์ปค๋„ ์Šค์ผ€์ค„๋ง ํ•ญ๋ชฉ ํ•˜๋‚˜๋กœ ์‚ฌ์ƒ๋œ๋‹ค. ๋‘ ๊ฐ€์ง€ ์Šค๋ ˆ๋”ฉ ๊ตฌํ˜„ ๋ชจ๋‘ ๋ฆฌ๋ˆ…์Šค์˜ clone(2) ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ด์šฉํ•œ๋‹ค. NPTL์—์„œ๋Š” ๋ฆฌ๋ˆ…์Šค์˜ futex(2) ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ด์šฉํ•ด ์Šค๋ ˆ๋“œ ๋™๊ธฐํ™” ์š”์†Œ๋“ค(๋ฎคํ…์Šค, ์Šค๋ ˆ๋“œ ํ•ฉ๋ฅ˜ ๋“ฑ)์„ ๊ตฌํ˜„ํ•œ๋‹ค.

LinuxThreads

์ด ๊ตฌํ˜„์˜ ์ฃผ์š” ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ๋ฉ”์ธ (์ตœ์ดˆ) ์Šค๋ ˆ๋“œ์™€ ํ”„๋กœ๊ทธ๋žจ์—์„œ pthread_create(3)๋กœ ๋งŒ๋“œ๋Š” ์Šค๋ ˆ๋“œ์— ๋”ํ•ด์„œ ๊ตฌํ˜„์—์„œ "๊ด€๋ฆฌ์ž" ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด ์Šค๋ ˆ๋“œ๊ฐ€ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ๊ณผ ์ข…๋ฃŒ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. (์ž˜๋ชปํ•ด์„œ ๊ทธ ์Šค๋ ˆ๋“œ๋ฅผ ์ฃฝ์ด๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.)

  • ๊ตฌํ˜„ ๋‚ด๋ถ€์—์„œ ์‹œ๊ทธ๋„์„ ์ด์šฉํ•œ๋‹ค. ๋ฆฌ๋ˆ…์Šค 2.2์™€ ์ดํ›„์—์„œ๋Š” ์ฒ˜์Œ ์„ธ ๊ฐœ ์‹ค์‹œ๊ฐ„ ์‹œ๊ทธ๋„์„ ์“ด๋‹ค. (signal(7) ์ฐธ๊ณ .) ๊ทธ ์ „์˜ ๋ฆฌ๋ˆ…์Šค ์ปค๋„์—์„œ๋Š” SIGUSR1๊ณผ SIGUSR2๋ฅผ ์“ด๋‹ค. ์‘์šฉ์—์„œ๋Š” ๊ตฌํ˜„์—์„œ ์ด์šฉํ•˜๋Š” ์–ด๋–ค ์‹œ๊ทธ๋„๋„ ์‚ฌ์šฉ์„ ํ”ผํ•ด์•ผ ํ•œ๋‹ค.

  • ์Šค๋ ˆ๋“œ๋“ค์ด ํ”„๋กœ์„ธ์Šค ID๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š”๋‹ค. (์‹ค์งˆ์ ์œผ๋กœ LinuxThreads์˜ ์Šค๋ ˆ๋“œ๋Š” ํ‰์ƒ์‹œ๋ณด๋‹ค ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•˜์ง€๋งŒ ๊ณตํ†ต ํ”„๋กœ์„ธ์Šค ID๋ฅผ ๊ณต์œ ํ•˜์ง€๋Š” ์•Š๋Š” ํ”„๋กœ์„ธ์Šค๋“ค๋กœ ๊ตฌํ˜„๋ผ ์žˆ๋‹ค.) ps(1)์—์„œ LinuxThreads์˜ ์Šค๋ ˆ๋“œ๋“ค(๊ด€๋ฆฌ์ž ์Šค๋ ˆ๋“œ ํฌํ•จ)์€ ๋ณ„๊ฐœ ํ”„๋กœ์„ธ์Šค๋“ค๋กœ ๋ณด์ธ๋‹ค.

LinuxThreads ๊ตฌํ˜„์€ ๋‹ค์Œ์„ ํฌํ•จํ•œ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์—์„œ POSIX.1 ๋ช…์„ธ์™€ ๋‹ค๋ฅด๋‹ค.

  • getpid(2)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ์™ธ์˜ ์Šค๋ ˆ๋“œ์—์„œ getppid(2)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๊ด€๋ฆฌ์ž ์Šค๋ ˆ๋“œ์˜ ํ”„๋กœ์„ธ์Šค ID๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์›๋ž˜๋Š” ๊ทธ ์Šค๋ ˆ๋“œ๋“ค์—์„œ์˜ getppid(2)๊ฐ€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ์˜ getppid(2)์™€ ๊ฐ™์€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

  • ํ•œ ์Šค๋ ˆ๋“œ์—์„œ fork(2)๋กœ ์ƒˆ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์— ์–ด๋А ์Šค๋ ˆ๋“œ๋“  ๊ทธ ์ž์‹์— wait(2) ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ตฌํ˜„์—์„œ๋Š” ์ž์‹์„ ๋งŒ๋“  ์Šค๋ ˆ๋“œ๋งŒ wait(2) ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์Šค๋ ˆ๋“œ์—์„œ execve(2)๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ์— (POSIX.1์˜ ์š”๊ตฌ๋Œ€๋กœ) ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋“ค์ด ๋ชจ๋‘ ์ข…๋ฃŒ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ž˜์„œ ๋‚จ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ execve(2)๋ฅผ ํ˜ธ์ถœํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ™์€ PID๋ฅผ ๊ฐ€์ง„๋‹ค. ์›๋ž˜๋Š” ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์™€ ๊ฐ™์€ PID๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

  • ์Šค๋ ˆ๋“œ๋“ค์ด ์‚ฌ์šฉ์ž ๋ฐ ๊ทธ๋ฃน ID๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š”๋‹ค. set-user-ID ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ณต์žกํ•œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‘์šฉ์—์„œ seteuid(2) ๋‚ด์ง€ ์œ ์‚ฌ ํ•จ์ˆ˜๋กœ ํฌ๋ฆฌ๋ด์…œ์„ ๋ฐ”๊พธ๋ฉด Pthreads ํ•จ์ˆ˜๋“ค์ด ์‹คํŒจํ•˜๊ฒŒ ๋  ์ˆ˜ ์žˆ๋‹ค.

  • ์Šค๋ ˆ๋“œ๋“ค์ด ๊ณตํ†ต ์„ธ์…˜ ID ๋ฐ ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน ID๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ์Šค๋ ˆ๋“œ๋“ค์ด fcntl(2)๋กœ ์ƒ์„ฑํ•œ ๋ ˆ์ฝ”๋“œ ๋ฝ์„ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • times(2)์™€ getrusage(2)๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ •๋ณด๊ฐ€ ํ”„๋กœ์„ธ์Šค ์ „์—ญ์ด ์•„๋‹ˆ๋ผ ์Šค๋ ˆ๋“œ ํ•œ์ •์ด๋‹ค.

  • ์Šค๋ ˆ๋“œ๋“ค์ด ์„ธ๋งˆํฌ์–ด ์ž‘์—… ์ทจ์†Œ ๊ฐ’์„ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š”๋‹ค. (semop(2) ์ฐธ๊ณ .)

  • ์Šค๋ ˆ๋“œ๋“ค์ด ๊ฐ„๊ฒฉ ํƒ€์ด๋จธ๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ์Šค๋ ˆ๋“œ๋“ค์ด ๊ณตํ†ต ๋‚˜์ด์Šค ๊ฐ’์„ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • POSIX.1์—์„œ๋Š” ํ”„๋กœ์„ธ์Šค ์ „์ฒด๋กœ ๊ฐ€๋Š” ์‹œ๊ทธ๋„๊ณผ ๊ฐœ๋ณ„ ์Šค๋ ˆ๋“œ๋กœ ๊ฐ€๋Š” ์‹œ๊ทธ๋„์„ ๊ตฌ๋ณ„ํ•œ๋‹ค. POSIX.1์— ๋”ฐ๋ฅด๋ฉด ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์ž„์˜๋กœ ๊ณ ๋ฅธ ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ (๊ฐ€๋ น kill(2)๋กœ ๋ณด๋‚ธ) ํ”„๋กœ์„ธ์Šค๋กœ ํ–ฅํ•œ ์‹œ๊ทธ๋„์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. LinuxThreads์—์„œ๋Š” ํ”„๋กœ์„ธ์Šค๋กœ ํ–ฅํ•˜๋Š” ์‹œ๊ทธ๋„์ด๋ผ๋Š” ๊ฐœ๋…์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰ ํŠน์ • ์Šค๋ ˆ๋“œ๋กœ๋งŒ ์‹œ๊ทธ๋„์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

  • ์Šค๋ ˆ๋“œ๋“ค์— ๋ณ„๊ฐœ์˜ ๋Œ€์ฒด ์‹œ๊ทธ๋„ ์Šคํƒ ์„ค์ •์ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ƒˆ ์Šค๋ ˆ๋“œ์˜ ๋Œ€์ฒด ์‹œ๊ทธ๋„ ์Šคํƒ ์„ค์ •์„ ์ƒ์„ฑํ•œ ์Šค๋ ˆ๋“œ์—๊ฒŒ์„œ ๋ณต์‚ฌํ•˜๋ฉฐ, ๊ทธ๋ž˜์„œ ์ฒ˜์Œ์—๋Š” ์Šค๋ ˆ๋“œ๋“ค์ด ๋Œ€์ฒด ์‹œ๊ทธ๋„ ์Šคํƒ์„ ๊ณต์œ ํ•œ๋‹ค. (์ƒˆ ์Šค๋ ˆ๋“œ๊ฐ€ ๋Œ€์ฒด ์‹œ๊ทธ๋„ ์Šคํƒ์ด ์ •์˜๋˜์ง€ ์•Š์€ ์ฑ„๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค. ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๋Œ€์ฒด ์‹œ๊ทธ๋„ ์Šคํƒ์—์„œ ๋™์‹œ์— ์‹œ๊ทธ๋„์„ ์ฒ˜๋ฆฌํ•˜๋ฉด ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๊ทธ๋žจ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๋‹ค.)

NPTL

NPTL์—์„œ๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋“ค์ด ๊ฐ™์€ ์Šค๋ ˆ๋“œ ๊ทธ๋ฃน์— ๋“ค์–ด๊ฐ„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์Šค๋ ˆ๋“œ ๊ทธ๋ฃน์˜ ๋ชจ๋“  ๊ตฌ์„ฑ์›์€ ๊ฐ™์€ PID๋ฅผ ๊ณต์œ ํ•œ๋‹ค. NPTL์—์„œ๋Š” ๊ด€๋ฆฌ์ž ์Šค๋ ˆ๋“œ๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.

NPTL ๋‚ด๋ถ€์ ์œผ๋กœ ์ฒ˜์Œ ๋‘ ๊ฐœ ์‹ค์‹œ๊ฐ„ ์‹œ๊ทธ๋„์„ ์ด์šฉํ•œ๋‹ค. ์ฆ‰ ๊ทธ ์‹œ๊ทธ๋„๋“ค์„ ์‘์šฉ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ nptl(7)์„ ๋ณด๋ผ.

NPTL์—๋„ POSIX.1 ๋ถ€์ ํ•ฉ ์‚ฌํ•ญ์ด ์ตœ์†Œ ํ•œ ๊ฐ€์ง€ ์žˆ๋‹ค.

  • ์Šค๋ ˆ๋“œ๋“ค์ด ๊ณตํ†ต ๋‚˜์ด์Šค ๊ฐ’์„ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ช‡ ๊ฐ€์ง€ NPTL ๋ถ€์ ํ•ฉ ์‚ฌํ•ญ๋“ค์€ ๊ตฌ์‹ ์ปค๋„์—์„œ๋งŒ ๋ฐœ์ƒํ•œ๋‹ค.

  • times(2)์™€ getrusage(2)๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ •๋ณด๊ฐ€ ํ”„๋กœ์„ธ์Šค ์ „์—ญ์ด ์•„๋‹ˆ๋ผ ์Šค๋ ˆ๋“œ ํ•œ์ •์ด๋‹ค. (์ปค๋„ 2.6.9์—์„œ ์ˆ˜์ •)

  • ์Šค๋ ˆ๋“œ๋“ค์ด ์ž์› ์ œํ•œ์„ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š”๋‹ค. (์ปค๋„ 2.6.10์—์„œ ์ˆ˜์ •)

  • ์Šค๋ ˆ๋“œ๋“ค์ด ๊ฐ„๊ฒฉ ํƒ€์ด๋จธ๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š”๋‹ค. (์ปค๋„ 2.6.12์—์„œ ์ˆ˜์ •)

  • setsid(2)๋กœ ์ƒˆ ์„ธ์…˜์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒŒ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—๊ฒŒ๋งŒ ํ—ˆ์šฉ๋œ๋‹ค. (์ปค๋„ 2.6.16์—์„œ ์ˆ˜์ •)

  • setpgid(2)๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน ๋ฆฌ๋”๋กœ ๋งŒ๋“œ๋Š” ๊ฒŒ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—๊ฒŒ๋งŒ ํ—ˆ์šฉ๋œ๋‹ค. (์ปค๋„ 2.6.16์—์„œ ์ˆ˜์ •)

  • ์Šค๋ ˆ๋“œ๋“ค์— ๋ณ„๊ฐœ์˜ ๋Œ€์ฒด ์‹œ๊ทธ๋„ ์Šคํƒ ์„ค์ •์ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ƒˆ ์Šค๋ ˆ๋“œ์˜ ๋Œ€์ฒด ์‹œ๊ทธ๋„ ์Šคํƒ ์„ค์ •์„ ์ƒ์„ฑํ•œ ์Šค๋ ˆ๋“œ์—๊ฒŒ์„œ ๋ณต์‚ฌํ•˜๋ฉฐ, ๊ทธ๋ž˜์„œ ์ฒ˜์Œ์—๋Š” ์Šค๋ ˆ๋“œ๋“ค์ด ๋Œ€์ฒด ์‹œ๊ทธ๋„ ์Šคํƒ์„ ๊ณต์œ ํ•œ๋‹ค. (์ปค๋„ 2.6.16์—์„œ ์ˆ˜์ •)

NPTL ๊ตฌํ˜„์˜ ๋‹ค์Œ ์ถ”๊ฐ€ ์‚ฌํ•ญ์— ์œ ์˜ํ•˜๋ผ.

  • ์Šคํƒ ํฌ๊ธฐ ์—ฐ์„ฑ ์ž์› ์ œํ•œ(setrlimit(2)์˜ RLIMIT_STACK ์„ค๋ช… ์ฐธ๊ณ )์„ ๋ฌด์ œํ•œ ์™ธ์˜ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ๊ทธ ๊ฐ’์ด ์ƒˆ ์Šค๋ ˆ๋“œ์˜ ๊ธฐ๋ณธ ์Šคํƒ ํฌ๊ธฐ๋ฅผ ๊ทœ์ •ํ•œ๋‹ค. ํšจ๊ณผ๊ฐ€ ์žˆ์œผ๋ ค๋ฉด ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ „์— ์ œํ•œ์„ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์…ธ ๋‚ด์žฅ ๋ช…๋ น ulimit -s๋ฅผ (C ์…ธ์—์„œ๋Š” limit stacksize๋ฅผ) ์“ธ ์ˆ˜ ์žˆ๋‹ค.

์Šค๋ ˆ๋”ฉ ๊ตฌํ˜„ ์•Œ์•„๋‚ด๊ธฐ

glibc 2.3.2๋ถ€ํ„ฐ๋Š” getconf(1) ๋ช…๋ น์„ ์‚ฌ์šฉํ•ด ์‹œ์Šคํ…œ์˜ ์Šค๋ ˆ๋”ฉ ๊ตฌํ˜„์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

bash$ getconf GNU_LIBPTHREAD_VERSION
NPTL 2.3.4

๊ทธ ์ „์˜ glibc ๋ฒ„์ „์—์„œ๋Š” ๋‹ค์Œ ์ •๋„ ๋ช…๋ น์ด๋ฉด ๊ธฐ๋ณธ ์Šค๋ ˆ๋”ฉ ๊ตฌํ˜„์„ ์•Œ์•„๋‚ด๊ธฐ์— ์ถฉ๋ถ„ํ•  ๊ฒƒ์ด๋‹ค.

bash$ $( ldd /bin/ls | grep libc.so | awk '{print $3}' ) | \
                egrep -i 'threads|nptl'
        Native POSIX Threads Library by Ulrich Drepper et al

์Šค๋ ˆ๋”ฉ ๊ตฌํ˜„ ์„ ํƒํ•˜๊ธฐ: LD_ASSUME_KERNEL

LinuxThreads์™€ NPTL์„ ๋ชจ๋‘ ์ง€์›ํ•˜๋Š” glibc(์ฆ‰ glibc 2.3.x)๊ฐ€ ์žˆ๋Š” ์‹œ์Šคํ…œ์—์„œ๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ LD_ASSUME_KERNEL์„ ์ด์šฉํ•ด ๋™์  ๋ง์ปค๊ฐ€ ์„ ํƒํ•œ ๊ธฐ๋ณธ ์Šค๋ ˆ๋”ฉ ๊ตฌํ˜„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ณ€์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉด ํŠน์ • ์ปค๋„ ๋ฒ„์ „ ์ƒ์—์„œ ๋Œ๊ณ  ์žˆ๋‹ค๊ณ  ๋™์  ๋ง์ปค์—์„œ ๊ฐ€์ •ํ•˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ NPTL์— ํ•„์š”ํ•œ ์ง€์› ์‚ฌํ•ญ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ์ปค๋„ ๋ฒ„์ „์„ ์ง€์ •ํ•˜๋ฉด LinuxThreads ์‚ฌ์šฉ์„ ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ๋‹ค. (์ด๋ ‡๊ฒŒ ํ•  ๊ฐ€์žฅ ๊ฐ€๋Šฅ์„ฑ ๋†’์€ ์ด์œ ๋Š” LinuxThreads์˜ ์–ด๋–ค ๋น„์ค€์ˆ˜ ๋™์ž‘ ๋ฐฉ์‹์— ์˜์กดํ•˜๋Š” (์ž˜๋ชป๋œ) ์‘์šฉ์„ ๋Œ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ์ผ ๊ฒƒ์ด๋‹ค.)

bash$ $( LD_ASSUME_KERNEL=2.2.5 ldd /bin/ls | grep libc.so | \
                awk '{print $3}' ) | egrep -i 'threads|nptl'
        linuxthreads-0.10 by Xavier Leroy

SEE ALSO

clone(2), fork(2), futex(2), gettid(2), proc(5), attributes(7), futex(7), nptl(7), sigevent(7), signal(7)

๋‹ค์–‘ํ•œ Pthreads ๋งค๋‰ด์–ผ ํŽ˜์ด์ง€: pthread_atfork(3), pthread_attr_init(3), pthread_cancel(3), pthread_cleanup_push(3), pthread_cond_signal(3), pthread_cond_wait(3), pthread_create(3), pthread_detach(3), pthread_equal(3), pthread_exit(3), pthread_key_create(3), pthread_kill(3), pthread_mutex_lock(3), pthread_mutex_unlock(3), pthread_mutexattr_destroy(3), pthread_mutexattr_init(3), pthread_once(3), pthread_spin_init(3), pthread_spin_lock(3), pthread_rwlockattr_setkind_np(3), pthread_setcancelstate(3), pthread_setcanceltype(3), pthread_setspecific(3), pthread_sigmask(3), pthread_sigqueue(3), pthread_testcancel(3)


2019-03-06

โš ๏ธ **GitHub.com Fallback** โš ๏ธ