보면 스택 주소의 차이는 0x801000인 것을 알 수 있고,
vmmap을 비교해 보았을 때 각 스레드별로 새로운 스택이 할당되는 것을 확인할 수 있다.
뭔가 pthread_join을 하면 이 영역이 없어져버릴 것만 같은 기분..
그래서 이번에는 테스트 코드를 짜서 다시 확인해 보았다.
테스트 코드
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
void *thread_routine()
{
int elearn;
printf("stack_address: %p\n", &elearn);
}
int main()
{
pthread_t thread_arr[5];
for (int i = 0; i < 5; i++) {
pthread_create(&thread_arr[i], NULL, thread_routine, NULL);
usleep(100);
}
for (int i = 0; i < 5; i++) {
pthread_join(thread_arr[i], NULL);
}
for (int i = 0; i < 5; i++) {
pthread_create(&thread_arr[i], NULL, thread_routine, NULL);
usleep(100);
}
for (int i = 0; i < 5; i++) {
pthread_join(thread_arr[i], NULL);
}
return 0;
}
결과
Q: 왜 이렇게까지 함?
A: 그야 재밌으니까..