亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 5984 | 回復(fù): 9
打印 上一主題 下一主題

【線程編程】分離線程與非分離線程的資源釋放驗(yàn)證小程序? 以及 pmap命令的解釋 [復(fù)制鏈接]

論壇徽章:
1
數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-05-27 06:20:00
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-03-12 12:29 |只看該作者 |倒序?yàn)g覽
我寫了個小測試程序 是非分離的線程在沒使用pthread_join來釋放其資源的情況下,我想驗(yàn)證這種情況下雖然線程函數(shù)執(zhí)行完畢退出了,但因?yàn)闆]有用pthread_join來釋放其資源,所以線程的函數(shù)?臻g仍沒有被釋放,無法被使用。

代碼如下:
void* fun(void* arg);

int main()
{
        int i = 0;
        int threadNum = 0;

        for(i=0; i<10000000; i++)
        {
                sleep(1);
                pthread_t tid;
                int err = pthread_create(&tid, NULL, fun, NULL);

                if(err != 0)
                {
                        printf("errno is %d\n", err);
                        printf("err is %s.\n", strerror(err));
                }
                else
                {
                        printf("tid is %lu, threadNum is %d \n", tid, ++threadNum);
                }
        }

        sleep(100000);
        return 0;
}

void* fun(void* arg)
{
        int a[1000];
        memset(a, 0, 1000*sizeof(int));
        printf("%s\n", "This is in fun.");

        return NULL;
}


函數(shù)的打印結(jié)果是:
tid is 3086392208, threadNum is 1
This is in fun.
tid is 3077999504, threadNum is 2
This is in fun.
tid is 3069606800, threadNum is 3
This is in fun.
tid is 3061214096, threadNum is 4
This is in fun.
tid is 3052821392, threadNum is 5
This is in fun.
tid is 3044428688, threadNum is 6
This is in fun.
tid is 3036035984, threadNum is 7
This is in fun.
tid is 3027643280, threadNum is 8
This is in fun.
。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。

一直在打印,且tid在不斷變化(因?yàn)榕f的線程的資源沒有被釋放,其id號不能被新的線程繼續(xù)使用),運(yùn)行一段時間后出現(xiàn)錯誤,打印

errno is 12
err is Cannot allocate memory.
errno is 12
err is Cannot allocate memory.
errno is 12
err is Cannot allocate memory.


我使用 pmap -d +進(jìn)程號
看到的內(nèi)存情況是這樣的:
[root@host snmpmanager]# pmap -d 10626
10626:   ./ notdetch
Address   Kbytes Mode  Offset           Device    Mapping
08048000       4 r-x-- 0000000000000000 0fd:00000 notdetch
08049000       4 rw--- 0000000000000000 0fd:00000 notdetch
0804a000     132 rw--- 000000000804a000 000:00000   [ anon ]
416fd000      76 r-x-- 0000000000000000 0fd:00000 libpthread-2.5.so
41710000       4 r---- 0000000000012000 0fd:00000 libpthread-2.5.so
41711000       4 rw--- 0000000000013000 0fd:00000 libpthread-2.5.so
41712000       8 rw--- 0000000041712000 000:00000   [ anon ]
475e9000     100 r-x-- 0000000000000000 0fd:00000 ld-2.5.so
47602000       4 r---- 0000000000018000 0fd:00000 ld-2.5.so
47603000       4 rw--- 0000000000019000 0fd:00000 ld-2.5.so
4bc09000    1244 r-x-- 0000000000000000 0fd:00000 libc-2.5.so
4bd40000       8 r---- 0000000000137000 0fd:00000 libc-2.5.so
4bd42000       4 rw--- 0000000000139000 0fd:00000 libc-2.5.so
4bd43000      12 rw--- 000000004bd43000 000:00000   [ anon ]
af7b4000       4 ----- 00000000af7b4000 000:00000   [ anon ]
af7b5000    8192 rw--- 00000000af7b5000 000:00000   [ anon ]
affb5000       4 ----- 00000000affb5000 000:00000   [ anon ]
affb6000    8192 rw--- 00000000affb6000 000:00000   [ anon ]
b07b6000       4 ----- 00000000b07b6000 000:00000   [ anon ]
b07b7000    8192 rw--- 00000000b07b7000 000:00000   [ anon ]
b0fb7000       4 ----- 00000000b0fb7000 000:00000   [ anon ]
b0fb8000    8192 rw--- 00000000b0fb8000 000:00000   [ anon ]
b17b8000       4 ----- 00000000b17b8000 000:00000   [ anon ]
b17b9000    8192 rw--- 00000000b17b9000 000:00000   [ anon ]
b1fb9000       4 ----- 00000000b1fb9000 000:00000   [ anon ]
b1fba000    8192 rw--- 00000000b1fba000 000:00000   [ anon ]
b27ba000       4 ----- 00000000b27ba000 000:00000   [ anon ]
b27bb000    8192 rw--- 00000000b27bb000 000:00000   [ anon ]

。。。。。。。。。。。。。。。。。

發(fā)現(xiàn)8142在不斷增多,一直到程序打印
errno is 12
err is Cannot allocate memory.后,pmap的輸出才不再增加,
我想問的是pmap的輸出中,所出現(xiàn)的那么多8142是不是就是每個線程未釋放的函數(shù)?臻g呢?

anon是什么意思?

謝謝 請大家看下~~~

論壇徽章:
1
數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-05-27 06:20:00
2 [報告]
發(fā)表于 2010-03-12 12:37 |只看該作者
ps:
在書上看到說

非分離線程在終止后,必須要有一個線程用join來等待它。否則,不會釋放該線程的資源
以供新線程使用,而這通常會導(dǎo)致內(nèi)存泄漏。因此,如果不希望線程被等待,請將該線程
作為分離線程來創(chuàng)建

那線程的資源具體有哪些呢?也包括該線程的函數(shù)的堆?臻g吧?

論壇徽章:
1
數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-05-27 06:20:00
3 [報告]
發(fā)表于 2010-03-12 12:46 |只看該作者
另外,pmap的輸出中,
b0fb8000    8192 rw--- 00000000b0fb8000 000:00000   [ anon ]
b17b8000       4 ----- 00000000b17b8000 000:00000   [ anon ]

anon什么意思呢

論壇徽章:
0
4 [報告]
發(fā)表于 2010-03-12 13:04 |只看該作者
anonymous memory,比如你用malloc分配的就是

論壇徽章:
1
數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-05-27 06:20:00
5 [報告]
發(fā)表于 2010-03-12 13:24 |只看該作者
malloc分配的是在堆上吧 只要我函數(shù)退出前將其free掉,就不會泄露這部分內(nèi)存

我想問的是非分離線程的函數(shù)自己的?臻g 會不會因?yàn)樵摼程沒有被主線程join,所以其?臻g沒有被釋放 ?
參見程序 和  pmap的輸出,   pmap的輸出中有那么多8912怎么解釋呢?

論壇徽章:
1
數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-05-27 06:20:00
6 [報告]
發(fā)表于 2010-03-12 13:38 |只看該作者
回復(fù) 4# greensnow

奧 你是說 【anon】  指的是匿名內(nèi)存是把?  anonymous memory?

論壇徽章:
0
7 [報告]
發(fā)表于 2010-03-12 13:54 |只看該作者
8k的線程堆棧

論壇徽章:
1
數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-05-27 06:20:00
8 [報告]
發(fā)表于 2010-03-12 15:25 |只看該作者
8k的線程堆棧
oralcal 發(fā)表于 2010-03-12 13:54



那根據(jù)pmap的打印結(jié)果中, 隨著時間變長,進(jìn)程占用了越來越多個8k的線程堆棧,所以能證明不用pthread_join來釋放線程資源的話,線程的函數(shù)棧也無法釋放,供別的線程使用,是把?

論壇徽章:
0
9 [報告]
發(fā)表于 2010-03-12 16:06 |只看該作者
可以這么說,具體線程所占的資源不僅只是棧。

論壇徽章:
1
數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-05-27 06:20:00
10 [報告]
發(fā)表于 2010-03-15 15:32 |只看該作者
恩 后來我又請教了下別人 ,感覺它的回復(fù)也很明白,貼到這兒:

在Linux中,進(jìn)程與線程在底層實(shí)現(xiàn)上是相同的。非分離線程的join跟進(jìn)程的waitpid是一個道理。
在內(nèi)核的角度來講,進(jìn)程執(zhí)行結(jié)束后,與進(jìn)程相關(guān)的資源都被釋放了,進(jìn)程不可運(yùn)行,處于TASK_ZOMBIE狀態(tài)。此時進(jìn)程存在的目的只有一個就是要向其父進(jìn)程提供信息,這些信息包括:內(nèi)核棧、thread_info結(jié)構(gòu)和task_struct結(jié)構(gòu)。通常父進(jìn)程需要檢查子進(jìn)程的返回狀態(tài),來判斷是否執(zhí)行成功。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP