C/C++ Linux pthread_attr_getstacksize 取得執行緒堆疊大小用法

本篇 ShengYu 介紹 C/C++ Linux/Unix 執行緒 pthread_attr_getstacksize() 用法,pthread_attr_getstacksize() 是用來取得該執行緒的堆疊大小。

pthread_attr_getstacksize 基本用法

pthread_create() 建立執行緒時沒有設定堆疊大小的話會採用 ulimit -s 的預設值,在 shell 下輸入 ulimit -s 就可以看到目前的設定值,單位為 KB,如下所示目前數值為 8192KB,也就是 8M

1
2
$ ulimit -s
8192

堆疊最小值定義為 PTHREAD_STACK_MIN,也就是 16384bytes。

以下簡單示範如何使用 pthread_attr_getstacksize()

cpp-pthread_attr_getstacksize.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// g++ cpp-pthread_attr_getstacksize.cpp -o a.out -pthread
#include <stdio.h>
#include <pthread.h>

int main() {
pthread_attr_t attr;
int ret;
size_t stacksize;

ret = pthread_attr_init(&attr);
if (ret != 0) {
fprintf(stderr, "Error: pthread_attr_init\n");
}

ret = pthread_attr_getstacksize(&attr, &stacksize);
if (ret != 0) {
fprintf(stderr, "Error: pthread_attr_getstacksize\n");
}

printf("stack size: %lu\n", stacksize);

ret = pthread_attr_destroy(&attr);
if (ret != 0) {
fprintf(stderr, "Error: pthread_attr_destroy\n");
}

return 0;
}

輸出如下,

1
stack size: 8388608

設定 stack size 後再取得 stack size

這邊示範先設定 stack size 後再試著取得 stack size 看看跟設定的是否一致,

cpp-pthread_attr_getstacksize2.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// g++ cpp-pthread_attr_getstacksize2.cpp -o a.out -pthread
#include <stdio.h>
#include <pthread.h>

int main() {
pthread_attr_t attr;
int ret;
size_t stacksize;

ret = pthread_attr_init(&attr);
if (ret != 0) {
fprintf(stderr, "Error: pthread_attr_init\n");
}

ret = pthread_attr_getstacksize(&attr, &stacksize);
if (ret != 0) {
fprintf(stderr, "Error: pthread_attr_getstacksize\n");
}
printf("stack size: %lu\n", stacksize);

ret = pthread_attr_setstacksize(&attr, 96*1024);
if (ret != 0) {
fprintf(stderr, "Error: pthread_attr_setstacksize\n");
}

ret = pthread_attr_getstacksize(&attr, &stacksize);
if (ret != 0) {
fprintf(stderr, "Error: pthread_attr_getstacksize\n");
}
printf("stack size: %lu\n", stacksize);

ret = pthread_attr_destroy(&attr);
if (ret != 0) {
fprintf(stderr, "Error: pthread_attr_destroy\n");
}

return 0;
}

輸出如下,

1
2
stack size: 8388608
stack size: 98304

其它相關文章推薦
C/C++ 新手入門教學懶人包
C/C++ Linux pthread_attr_setstacksize 設定執行緒堆疊大小用法
C/C++ Linux/Unix 讓執行緒跑在指定 CPU 的方法 sched_setaffinity
C/C++ Linux/Unix pthread 建立多執行緒用法與範例
C++ std::thread 建立多執行緒用法與範例