C/C++ Linux pthread_attr_setstacksize 設定執行緒堆疊大小用法

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

pthread_attr_setstacksize 基本用法

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

1
2
$ ulimit -s
8192

堆疊最小值定義為 PTHREAD_STACK_MIN,也就是 16384bytes,pthread_attr_setstacksize() 設定小於 PTHREAD_STACK_MIN 的話會回傳 0 (表示設定失敗),

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

cpp-pthread_attr_setstacksize.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
39
// g++ cpp-pthread_attr_setstacksize.cpp -o a.out -pthread
#include <stdio.h>
#include <pthread.h>

void * foo(void *arg) {
printf("foo\n");
return NULL;
}

int main() {
pthread_t t1;
pthread_attr_t attr;
int ret;
size_t stacksize = 20480;

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

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

ret = pthread_create(&t1, NULL, foo, NULL);
if (ret != 0) {
fprintf(stderr, "Error: pthread_create\n");
}

pthread_join(t1, NULL);

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

return 0;
}

補充:若要使用 PTHREAD_STACK_MIN 定義的話,需 include <limits.h>

其它參考
pthread_attr_setstacksize(3) - Linux manual page
https://man7.org/linux/man-pages/man3/pthread_attr_setstacksize.3.html
线程堆栈大小 pthread_attr_setstacksize 的使用
https://blog.csdn.net/godleading/article/details/7997630

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