pthread
리λ
μ€μμ Threadλ₯Ό μμ±νκ³ κ΄λ¦¬νλ ν¨μ
νλ‘μΈμ€ λ΄μμ μ€νλλ μ¬λ¬ νλ¦μ λ¨μ
μ¬λ¬κ°μ νλ‘μΈμ€λ₯Ό λ§λλ κ²μ΄ μλ, νλμ νλ‘μΈμ€ μμ μ€λ λλ₯Ό μμ±νμ¬ μ¬λ¬κ°μ μ€λ λκ° λμκ°λ©° λμνκ² νλ€.
1. μ€λ λμ μ₯μ
- λ¬Έλ§₯κ΅ν(context switching) μκ°μ΄ μ§§λ€.
- λ©λͺ¨λ¦¬κ³΅μ λ‘ μΈνμ¬ μμ€ν μμ μλͺ¨κ° μ€μ΄λ λ€.
- μλ΅μκ°μ΄ λ¨μΆλλ€.
2. pthread
POSIX Threadμ μ½μλ‘ μ λμ€ κ³μ΄ POSIXμμ€ν
μμ λ³λ ¬μ μΌλ‘ μλνλ μννΈμ¨μ΄λ₯Ό μμ±νκΈ° μνμ¬ μ 곡νλ API
ν€λνμΌ <pthread.h>
pthread μ¬μ©μ μ£Όμν μ
pthreadλ₯Ό μ¬μ©νλ λ©ν°μ€λ λ νλ‘κ·Έλ¨μμ λ©λͺ¨λ¦¬ λμκ° λ°μν μ μλ€.
pthread_createλ₯Ό ν΅ν΄ μλ‘μ΄ threadκ° μμ
μ μ²λ¦¬νκ³ threadκ° λλ λ pthread_create ν λ©λͺ¨λ¦¬λ₯Ό νμ νμ§ μμΌλ©΄ λ¬Έμ κ° λ°μν μ μλ€.
κ·Έλ¬λ―λ‘ pthread_create νμλ join λλ detachλ₯Ό μννλ κ²μ΄ λ°λμ§νλ€.
1. pthread_create(pthread_t thread, const pthread_attr_t *attr, void *(start_routine)(void *), void *arg)
- thread μμ±λ μ€λ λ μλ³μ
- attr μ€λ λ νΉμ μ€μ (κΈ°λ³Έ NULL)
- start_routine μ€λ λ ν¨μ (μ€λ λλ‘ λΆκΈ°ν΄μ μ€νν ν¨μ)
- arg μ€λ λ ν¨μ μΈμ
2. int pthread_join(pthread_t thread, void **thread_return);
리λ
μ€μμ λ³Έλ νλ‘μΈμ€λ λ©μΈμ€λ λλΌκ³ μ§μΉνλ€.
μλ‘μ΄ μ€λ λλ₯Ό μΆκ°λ‘ μμ±νλ ν¨μ
μλ μΆκ°λ μ€λ λμ μ½λκ° μ€νμ΄ λκ³ μ’
λ£λλ©΄ μ€λ λμ λ€μ μ½λλ₯Ό μ½μ΄λκ°μΌνμ§λ§ μΆκ°λ μ€λ λ μ€ μμ§ μ€νμ€μΈ μ€λ λκ° μλ€λ©΄ λΉμ μμ μΌλ‘ λμ ν μ μλ€.
μ€νμ€μΈ μ€λ λκ° λλ λκΉμ§ κΈ°λ€λ €μΌ ν λ μ¬μ©νλ€.
joinμ μ¬μ©νλ μ°λ λλ μ’
λ£λμ΄μΌ ν μμ μ λͺ
μν΄μΌ νλ μμ
μ μ¬μ©νλ€.
- thread κΈ°λ€λ¦΄ μ€λ λ μλ³μ
- thread_return μ€λ λμ λ¦¬ν΄ κ°μ κ°μ Έμ¬ μ μλ ν¬μΈν°
3. pthread_detach(pthread_t th)
μμ±λ μ°λ λκ° μ’ λ£λ λ μμμ μμμ μμ€ν μκ² λ°ννλ μ΅μ
- thread : detachν μ€λ λ μλ³μ123456789#inlcude<pthread.h>int pthread_detach(pthread_t thread);..if( pthread_create(&thread,&attr, &test_thread, NULL ) != 0 )return 1;pthread_detach(thread);
cs
μ°Έμ‘°
'TIL (Today I Learned) > Linux' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Linux] μΉ μλ² κ΅¬ν (0) | 2021.09.07 |
---|---|
[Linux]Symbolic/Hard link (0) | 2021.08.31 |
[Linux] Shellμ κ°λ (0) | 2021.08.30 |
[Linux] νκ²½λ³μ (0) | 2021.08.27 |
[Linux] makeμ Makefile (0) | 2021.08.25 |