青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大龍的博客

常用鏈接

統計

最新評論

pthread之線程堆棧(1) --- 轉

先來講說線程內存相關的東西,主要有下面幾條:
  1. 進程中的所有的線程共享相同的地址空間。
  2. 任何聲明為static/extern的變量或者堆變量可以被進程內所有的線程讀寫。
  3. 一個線程真正擁有的唯一私有儲存是處理器寄存器。
  4. 線程棧可以通過暴露棧地址的方式與其它線程進行共享。
     有大數據量處理的應用中,有時我們有必要在棧空間分配一個大的內存塊或者要分配很多小的內存塊,但是線程的棧空間的最大值在線程創建的時候就已經定下來了,如果棧的大小超過個了個值,系統將訪問未授權的內存塊,毫無疑問,再來的肯定是一個段錯誤。可是沒辦法,你還是不得不分配這些內存,于是你開會為分配一個整數值而動用malloc這種超級耗時的操作。當然,在你的需求可以評估的情況下,你的需求還是可以通過修改線程的棧空間的大小來改變的。

下面的我們用pthread_attr_getstacksize和pthread_attr_setstacksize的方法來查看和設置線程的棧空間。
注意:
      下面的測試代碼在我自己的機子上(ubuntu6.06,ubuntu6.10,redhat 9, gentoo)通過了測試,但是很奇怪的是在我同事的機子上,無論是改變環境,還是想其它方法都不能正常的運行 。在網上查了一下,很多人也存在同樣的問題,至今不知道為何。

linux線程的實現方式決定了對進程的限制同樣加在了線程身上:)所以,有問題,請參見<pthread之線程棧空間(2)(進行棧)

直接看代碼吧,只有一個C文件(thread_attr.c)
#include <limits.h>
#include <pthread.h>
#include "errors.h"


//線程體,在棧中分配一個大小為15M的空間,并進行讀寫
void *thread_routine (void *arg)
{
printf ("The thread is here\n");
//棧大小為16M,如果直接分配16M的棧空間,會出現段錯誤 ,因為棧中還有其它的
//變量要放署
char p[1024*1024*15];
int i=1024*1024*15;

//確定內存分配的確成功了
while(i--)
{
p[i] = 3;
}

printf( "Get 15M Memory!!!\n" );

//分配更多的內存(如果分配1024*1020*512的話就會出現段錯誤)
char p2[ 1024 * 1020 + 256 ];
memset( p2, 0, sizeof( char ) * ( 1024 * 1020 + 256 ) );
printf( "Get More Memory!!!\n" );
return NULL;
}

int main (int argc, char *argv[])
{
pthread_t thread_id;
pthread_attr_t thread_attr;
size_t stack_size;
int status;

status = pthread_attr_init (&thread_attr);
if (status != 0)
err_abort (status, "Create attr");

status = pthread_attr_setdetachstate (
&thread_attr, PTHREAD_CREATE_DETACHED);

if (status != 0)
err_abort (status, "Set detach");
//通常出現的問題之一,下面的宏沒有定義
#ifdef _POSIX_THREAD_ATTR_STACKSIZE
//得到當前的線程棧大小
status = pthread_attr_getstacksize (&thread_attr, &stack_size);
if (status != 0)
err_abort (status, "Get stack size");
printf ("Default stack size is %u; minimum is %u\n",
stack_size, PTHREAD_STACK_MIN);

//設置當前的線程的大小
status = pthread_attr_setstacksize (
&thread_attr, PTHREAD_STACK_MIN*1024);
if (status != 0)
err_abort (status, "Set stack size");

//得到當前的線程棧的大小
status = pthread_attr_getstacksize (&thread_attr, &stack_size);
if (status != 0)
err_abort (status, "Get stack size");
printf ("Default stack size is %u; minimum is %u\n",
stack_size, PTHREAD_STACK_MIN);
#endif
int i = 5;
//分配5個具有上面的屬性的線程體
while(i--)
{
status = pthread_create (
&thread_id, &thread_attr, thread_routine, NULL);
if (status != 0)
err_abort (status, "Create thread");
}

getchar();
printf ("Main exiting\n");
pthread_exit (NULL);
return 0;
}
看看執行過程:
dongq@DongQ_Lap ~/workspace/test/pthread_attr $ make
cc -pthread -g -DDEBUG -lrt  -o thread_attr thread_attr.c
dongq@DongQ_Lap ~/workspace/test/pthread_attr $ ./thread_attr
Default stack size is 8388608; minimum is 16384         //默認的棧大小為8M
Default stack size is 16777216; minimum is 16384      //設置后的結果為16M
The thread is here
The thread is here
The thread is here
The thread is here
The thread is here
Get 15M Memory!!!
Get More Memory!!!
Get 15M Memory!!!
Get More Memory!!!
Get 15M Memory!!!
Get 15M Memory!!!
Get More Memory!!!
Get More Memory!!!
Get 15M Memory!!!
Get More Memory!!!

Main exiting

posted on 2009-06-07 14:41 大龍 閱讀(715) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲在线一区二区| 国产精品久久久久一区二区| 日韩视频免费观看高清在线视频 | 国产精品入口夜色视频大尺度| 一本色道久久综合亚洲精品高清| 亚洲婷婷综合色高清在线| 亚洲视频在线一区观看| 亚洲永久免费av| 久久久久国内| 欧美国产激情二区三区| 亚洲美女av在线播放| 亚洲最新视频在线播放| 亚洲性夜色噜噜噜7777| 欧美在线观看视频| 欧美国内亚洲| 国产欧美日韩视频一区二区三区 | 欧美专区18| 欧美a一区二区| 一区二区高清视频| 欧美一级在线视频| 欧美激情四色| 狠狠爱www人成狠狠爱综合网| 最新热久久免费视频| 亚洲欧美一区二区原创| 你懂的亚洲视频| 亚洲一区二区三区免费观看 | 国产日本欧美视频| 亚洲狠狠丁香婷婷综合久久久| 亚洲永久免费av| 欧美高清不卡| 欧美在线综合视频| 国产精品hd| 亚洲精品视频一区二区三区| 久久国产精品久久久久久电车| 亚洲国产日韩在线一区模特| 午夜精品久久久久| 欧美日韩在线免费视频| 亚洲国产成人精品久久| 欧美一级免费视频| 亚洲精品日韩精品| 久久人人爽人人| 国产日产高清欧美一区二区三区| 最新中文字幕亚洲| 久久综合色一综合色88| 亚洲女ⅴideoshd黑人| 欧美激情一区二区三区高清视频 | 国产综合香蕉五月婷在线| 一本一本久久| 亚洲高清网站| 女人香蕉久久**毛片精品| 国产一区二区三区日韩| 午夜亚洲性色视频| 亚洲系列中文字幕| 国产精品嫩草影院av蜜臀| 一区二区三区欧美视频| 亚洲日本一区二区| 99热免费精品| 欧美精品在线一区| 精品成人免费| 浪潮色综合久久天堂| 性做久久久久久久免费看| 国产精品人人做人人爽| 亚洲一区二区三区视频| 一区二区成人精品| 国产精品久久久久9999高清| 亚洲特级毛片| 正在播放亚洲一区| 国产精品女主播一区二区三区| 亚洲图片欧美日产| 亚洲午夜免费视频| 国产欧美日韩免费看aⅴ视频| 久久不射网站| 久久久久国产精品厨房| 亚洲国产精品尤物yw在线观看| 欧美成人免费在线观看| 欧美+日本+国产+在线a∨观看| 亚洲国产欧美一区二区三区同亚洲| 另类图片国产| 欧美激情精品| 亚洲欧美日韩直播| 中国女人久久久| 国产精品午夜春色av| 久久精品夜色噜噜亚洲a∨| 久久精品国内一区二区三区| 亚洲国产精品va在线观看黑人| 亚洲第一黄色网| 欧美日韩精品在线| 久久成人国产| 久久亚洲综合网| 亚洲无线视频| 欧美一区二区性| 亚洲欧洲日本在线| 亚洲午夜激情网站| 好男人免费精品视频| 亚洲精品国产精品乱码不99按摩| 亚洲欧美视频在线观看视频| 在线成人中文字幕| 亚洲手机成人高清视频| 亚洲第一级黄色片| 一区二区三区色| 亚洲国产精品国自产拍av秋霞 | 欧美国产丝袜视频| 国产精品久久| 欧美激情女人20p| 国产欧美精品xxxx另类| 亚洲国产第一| 国内精品久久久久伊人av| 亚洲精品美女在线观看| 激情综合网址| 亚洲一级免费视频| 亚洲人体一区| 久久久国产精品一区| 亚洲福利视频一区| 夜夜嗨av一区二区三区四区| 国产欧美精品xxxx另类| 欧美国产亚洲视频| 国产精品三区www17con| 国外成人免费视频| 欧美一区二区三区免费看| 欧美一级播放| 亚洲国产福利在线| 亚洲国产精品一区制服丝袜| 欧美日韩精品二区| 久久精品视频亚洲| 欧美成人综合一区| 欧美亚洲免费| 免费日韩成人| 欧美在线观看网站| 欧美jizzhd精品欧美巨大免费| 亚洲午夜电影| 老色批av在线精品| 久久国产一二区| 国产美女精品免费电影| 一级成人国产| 一区二区三区福利| 国产精品v亚洲精品v日韩精品| 亚洲精品日韩在线观看| 久久久免费av| 老巨人导航500精品| 久久久久九九九九| 国产日韩欧美三级| 销魂美女一区二区三区视频在线| 亚洲与欧洲av电影| 国产精品免费在线| 午夜精品短视频| 久久久久9999亚洲精品| 黑丝一区二区三区| 米奇777在线欧美播放| 亚洲激情六月丁香| 一本色道久久综合亚洲二区三区| 欧美日韩1区2区3区| 一个人看的www久久| 欧美一二三区在线观看| 国产欧美一区二区精品婷婷 | 玖玖玖免费嫩草在线影院一区| 韩国av一区二区三区| 久久先锋资源| 亚洲理伦电影| 欧美一区国产一区| 伊人久久婷婷| 欧美激情一区在线观看| 亚洲视频在线观看| 久久久在线视频| 亚洲人成人一区二区三区| 欧美日韩一区高清| 小处雏高清一区二区三区| 欧美.www| 亚洲伊人观看| 一区二区视频在线观看| 欧美日韩成人精品| 亚洲欧美一区二区激情| 欧美成人情趣视频| 亚洲一区二区三区在线视频| 国产一区二区三区高清在线观看| 久久亚裔精品欧美| 亚洲午夜视频| 欧美国产一区二区在线观看| 亚洲视频综合在线| 在线观看日韩av| 欧美日韩在线高清| 久久精品亚洲| 日韩亚洲欧美综合| 快she精品国产999| 欧美日韩亚洲综合一区| 午夜精品亚洲一区二区三区嫩草| 麻豆精品一区二区综合av | 久久久久久**毛片大全| 亚洲精品视频二区| 韩国欧美一区| 国产精品vvv| 欧美暴力喷水在线| 久久综合狠狠综合久久综合88| aa成人免费视频| 久久天堂av综合合色| 一区二区三区国产在线| 亚洲国产精品国自产拍av秋霞| 久久精品成人一区二区三区| 一区二区高清视频在线观看| 1204国产成人精品视频| 国产欧美日韩亚洲|