Linux 多工程式設計 執行緒堆疊大小的使用介紹

2021-09-01 16:04:38 字數 1382 閱讀 5563

pthread_create()建立執行緒時,若不指定分配堆疊大小,系統會分配預設值,通過命令檢視方法如下:

上面的單位為 kb,所以,執行緒預設堆疊大小為 8m。

也可以在終端下通過 ulimit -s  value 用來重新設定 stack 大小。

一般來說,預設堆疊大小為 8388608,堆疊最小為 16384, 單位為位元組。在某些嵌入式系統中,如果其記憶體不是很大,若採用預設值的話,會導致出現問題,若記憶體不足,則 pthread_create() 會返回 12,其定義如下:

#define eagain 11

#define enomem 12 /* out of memory */

我們用 pthread_attr_getstacksize() 和 pthread_attr_setstacksize() 的方法來檢視和設定執行緒的堆疊空間。

檢視執行緒堆疊大小示例**如下:

#include #include #include //執行緒操作所需標頭檔案

int main(void)

//獲取當前的執行緒棧大小

ret = pthread_attr_getstacksize(&attr, &stack_size);

if(ret != 0)

//列印堆疊值

printf("stack_size = %db, %dk\n", stack_size, stack_size/1024);

return 0;

}

編譯**時,需要加上 -lpthread,執行結果如下:

設定執行緒堆疊大小示例**如下:

#include #include #include //執行緒操作所需標頭檔案

int main(void)

stack_size = 1024*20; //堆疊大小設定為20k

ret = pthread_attr_setstacksize(&attr, stack_size);//設定執行緒堆疊大小

if(ret != 0)

stack_size = 0;

ret = pthread_attr_getstacksize(&attr, &stack_size);//獲取執行緒堆疊大小

//列印堆疊值

printf("stack_size = %db, %dk\n", stack_size, stack_size/1024);

return 0;

}

執行結果如下:

多工 執行緒

建立函式 建立執行緒物件,並制定函式 開啟執行緒 import threading import time defwork1 1.定義函式 for i in range 5 print 正在掃地 i time.sleep 1 defmain 測試執行緒的基本使用 2.建立執行緒物件 t1 threa...

多工 執行緒

簡單地說,就是作業系統可以同時執行多個任務。實現多工有多種方式,執行緒 程序 協程。可以簡單理解為同一程序中有多個計數器,每個執行緒的執行時間不確定,而每個程序的時間片相等,執行緒是作業系統排程執行的最小單位.import threadingt1 threading.thread target fu...

多工 執行緒

什麼叫 多工 呢?簡單地說,就是作業系統可以同時執行多個任務。執行緒 1.使用threading模組 import threading defsing pass defdance pass defmain t1 threading.thread target sing t2 threading.th...