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...