Pthreads 반환 값
반환값이 있는 함수의 스레드 종료
- pthread_join
int pthread\_join(pthread\_t thread, void \*\*retval)
- 반환값을 사용하지 않는 함수의 경우
- retval에 NULL을 넣음
- 반환값을 사용하는 함수의 경우
- retval이 가리키는 곳이 함수의 반환 값이 저장됨
- 반환 값(void *)을 저장할 공간을 가리키는 포인터(void **)를 아규먼트로 넣어야 함
- retval이 가리키는 곳이 함수의 반환 값이 저장됨
- 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 |
댓글