λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

TIL (Today I Learned)/Linux

[Linux] pthread joinκ³Ό detach

728x90

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ν•  μŠ€λ ˆλ“œ μ‹λ³„μž
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #inlcude<pthread.h>
     
    int pthread_detach(pthread_t thread);
     
    ..
     
    if( pthread_create(&thread,&attr, &test_thread, NULL ) != 0 ) 
        return 1
    pthread_detach(thread);
    cs

μ°Έμ‘°

Pthread - create, exit, join, detach, mutex

'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