본문 바로가기
멀티코어 프로그래밍/Pthread

Pthread 반환 값

by 기리의 개발로그 2022. 5. 10.

Pthreads 반환 값

반환값이 있는 함수의 스레드 종료

  • pthread_join
int pthread\_join(pthread\_t thread, void \*\*retval)  
  • 반환값을 사용하지 않는 함수의 경우
    • retval에 NULL을 넣음
  • 반환값을 사용하는 함수의 경우
    • retval이 가리키는 곳이 함수의 반환 값이 저장됨
      • 반환 값(void *)을 저장할 공간을 가리키는 포인터(void **)를 아규먼트로 넣어야 함

  • ex1) 잘못된 반환 값 전달

  • get_sum 함수에서 ret 변수에 값을 저장하여 주소를 return 한다.
  • Main 함수에서 get_sum 함수의 return 값을 저장할 공간을 가리키는 포인터 ret 의 주소 값을 pthread_join 함수의 아규먼트로 넘겨준다.
  • pthread_join 함수에서 get_sum 함수의 리턴 값인 ret의 주소를 저장하려고 하지만 get_sum 함수가 끝남과 동시에 지역 변수였던 ret의 공간이 사라지게 되므로 주소의 값에는 엉뚱한 값이 들어있다.

  • 실행결과 지역 변수의 주소가 return 되었다고 warning이 뜨는 것을 알 수 있다.
  • 지역 변수의 공간이 사라졌기 때문에 출력시 엉뚱한 값이 출력됨을 알 수 있다.
  • ex2) 올바른 반환 값 전달**

  • 지역 변수에 값을 저장한 후 주소를 return 하면 get_sum 함수가 끝남과 동시에 공간이 사라지므로 동적 할당을 이용하여 Stack 영역이 아닌 Heap 영역에 값을 저장한다.
  • get_sum 함수가 끝나도 Heap 영역의 공간은 사라지지 않기 때문에 get_sum 함수의 return 값을 정상적으로 받을 수 있다.

  • 실행결과 return 값이 정상적으로 전달되어 올바른 결과가 출력됨을 알 수 있다.
반응형

'멀티코어 프로그래밍 > Pthread' 카테고리의 다른 글

Pthread Affinity  (13) 2022.05.12
Pthread 프로그래밍(3)  (5) 2022.05.11
Pthread 아규먼트(2)  (2) 2022.05.09
Pthread 아규먼트(1)  (13) 2022.05.06
Pthread 프로그래밍(2)  (4) 2022.05.04

댓글