<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    線程堆棧大小 pthread_attr_setstacksize 的使用

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    pthread_create 創建線程時,若不指定分配堆棧大小,系統會分配默認值,查看默認值方法如下:

    # ulimit -s
    8192
    #

    上述表示為8M;單位為KB。

    也可以通過# ulimit -a 其中 stack size 項也表示堆棧大小。ulimit -s  value 用來重新設置stack 大小。

    一般來說 默認堆棧大小為 8388608; 堆棧最小為 16384 。 單位為字節。

    堆棧最小值定義為 PTHREAD_STACK_MIN ,包含#include <limits.h>后可以通過打印其值查看。對于默認值可以通過pthread_attr_getstacksize (&attr, &stack_size); 打印stack_size來查看。

    尤其在嵌入式中內存不是很大,若采用默認值的話,會導致出現問題,若內存不足,則 pthread_create 會返回 12,定義如下:

    #define EAGAIN 11

    #define ENOMEM 12 /* Out of memory */

    上面了解了堆棧大小,下面就來了解如何使用 pthread_attr_setstacksize 重新設置堆棧大小。先看下它的原型:

    #include <pthread.h>
    int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);

    attr 是線程屬性變量;stacksize 則是設置的堆棧大小。 返回值0,-1分別表示成功與失敗。

    這里是使用方法

      pthread_t thread_id;

      int ret ,stacksize = 20480; /*thread 堆棧設置為20K,stacksize以字節為單位。*/

      pthread_attr_t attr;
      ret = pthread_attr_init(&attr); /*初始化線程屬性*/

      if (ret != 0)

          return -1;
      ret = pthread_attr_setstacksize(&attr, stacksize);

      if(ret != 0)

          return -1;
      ret = pthread_create (&thread_id, &attr, &func, NULL);

      if(ret != 0)

          return -1;
      ret = pthread_attr_destroy(&attr); /*不再使用線程屬性,將其銷毀*/

      if(ret != 0)

        return -1;

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全