POSIX thread의 Stack 크기 설정
다음 코드는 시스템의 기본 Stack 크기를 먼저 읽은 다음 크기를 다시 설정한 다음 다시 읽습니다.
4
#include
#include
#include
#include
void *foo(void *arg)
{
int size = 0;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_getstacksize(&attr, &size);
printf("get stack size : %dK
", size/1024);
return 0;
}
int main(int argc, char ** argv)
{
pthread_t id = -1;
pthread_attr_t attr;
int size = 0;
if(argc != 2)
{
return -1;
}
pthread_attr_init(&attr);
pthread_attr_getstacksize(&attr, &size);
printf("the default pthread stack size: %dK
", size/1024);
size = atoi(argv[1]);
if( pthread_attr_setstacksize(&attr, size) != 0)
{
int err =errno;
// printf("set stack size error: %dK, (%d) (%s)
", size/1024, err, strerror(err));
printf("set stack size error
");
}
pthread_create(&id, &attr, foo, NULL);
pthread_join(id, NULL);
pthread_attr_destroy(&attr);
return 0;
}
명령 실행 gcc -g -pthread getstacksize.c -lpthread , 그리고 Stack size:
$ ./a.out 1024
the default pthread stack size: 8192K
set stack size error
get stack size : 8192K
charles@taotao:~$ ./a.out 262144
the default pthread stack size: 8192K
get stack size : 8192K
charles@taotao:~$ ./a.out 2097152
the default pthread stack size: 8192K
get stack size : 8192K
1024(1K)를 처음 설정하는 데 실패했습니다. Stack size는 기본 8M(8192K)입니다.
두 번째 설정은 262144(256K)에 성공했지만 Stack size는 8M입니다.
세 번째도 마찬가지다.
왜 설정한 Stack size가 제대로 되돌아오지 않았을까요?
오늘 이 문제를 다시 봤는데 함수 pthread 에 대한attr_init () 의 사용에 문제가 있습니다.
이 함수는 전송된 pthread 에attr_t 변수를 초기화하면 Stack size가 0으로 설정됩니다.
Pthreadattr_getstacksize 함수는 전송된attr의stacksize를 판단합니다. 0이면 시스템의 기본stacksize를 사용합니다.
int
__pthread_attr_getstacksize (attr, stacksize)
const pthread_attr_t *attr;
size_t *stacksize;
{
struct pthread_attr *iattr;
assert (sizeof (*attr) >= sizeof (struct pthread_attr));
iattr = (struct pthread_attr *) attr;
size_t size = iattr->stacksize;
/* If the user has not set a stack size we return what the system
will use as the default. */
if (size == 0)
{
lll_lock (__default_pthread_attr_lock, LLL_PRIVATE);
size = __default_pthread_attr.stacksize;
lll_unlock (__default_pthread_attr_lock, LLL_PRIVATE);
}
*stacksize = size;
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.