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

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

Chinaunix

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

[函數(shù)] malloc是否會導(dǎo)致優(yōu)先級翻轉(zhuǎn)現(xiàn)象,線程安全,不可重入概念 [復(fù)制鏈接]

論壇徽章:
2
射手座
日期:2014-09-03 00:18:022015年辭舊歲徽章
日期:2015-03-03 16:54:15
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2014-08-28 12:46 |只看該作者 |倒序?yàn)g覽
沒有看glibc的malloc源代碼,只是看了一點(diǎn)網(wǎng)上的介紹,談?wù)勛约旱睦斫,不知道是否正確;請大牛們指點(diǎn)

malloc是從進(jìn)程的heap里面申請的,heap對于進(jìn)程里面的線程來說是共享的,可以理解為malloc管理的內(nèi)存是一個全局變量,那么malloc在對這個全局變量操作的時候,勢必要加鎖保護(hù)吧,加了鎖以后就可以保證同進(jìn)程下的線程可以安全的操作這個heap了,也就能保證malloc被多個線程同時調(diào)用,所以從這個概念上說它是線程安全的;

為什么說是malloc是不可重入的,比如線程A正在調(diào)用malloc,拿到鎖以后,被Signal處理函數(shù)中斷,Signal處理函數(shù)里面再調(diào)用malloc的話,也會去拿鎖,這樣就會發(fā)生死鎖,所以從這個概念上來看它是不可重入

什么時候會產(chǎn)生重入現(xiàn)象呢?
1,遞歸,自己調(diào)用自己;
2,Signal,在signal里面調(diào)用的函數(shù),都有可能;

malloc操作的是進(jìn)程下的heap,不同進(jìn)程對應(yīng)的heap也不同,不同進(jìn)程里的malloc操作的是2塊不同的內(nèi)存,不存在任何競爭問題,所以進(jìn)程間malloc可以放心大膽的用;

因?yàn)槭蔷程安全,所以對于多線程編程來說不會有大的問題,但是想到一個問題:
malloc里面加鎖,某些場景會導(dǎo)致任務(wù)優(yōu)先級翻轉(zhuǎn)現(xiàn)象

比如線程A、B、C;優(yōu)先級A>B>C;
1,C調(diào)用malloc,拿到鎖,分配內(nèi)存;
2,C被B搶占;B運(yùn)行;
3,A資源滿足;A搶占B;A運(yùn)行;
4,A調(diào)用malloc,拿不到鎖;被pending;B運(yùn)行;
5,需要等B運(yùn)行結(jié)束之后,C運(yùn)行,然后C釋放malloc的鎖;
6,A等C釋放鎖以后,運(yùn)行;
看到現(xiàn)象就是A優(yōu)先級比B高,但是B卻先運(yùn)行;

優(yōu)先級翻轉(zhuǎn)對于調(diào)度策略為Schedue_Normal的任務(wù)還無所謂,因?yàn)檫@種調(diào)度算法本來就不保證優(yōu)先級高的任務(wù)一定先運(yùn)行,但是對于嚴(yán)格基于優(yōu)先級的調(diào)度策略比如Schedue_FIFO,需要看自己程序是否允許這種現(xiàn)象發(fā)生,優(yōu)先級翻轉(zhuǎn)是否會帶來災(zāi)難;如果不能容忍這種現(xiàn)象的話,就需要仔細(xì)考慮任務(wù)優(yōu)先級的設(shè)置;


PS:Glibc的代碼怎么看,用si搜了一下malloc,發(fā)現(xiàn)有好幾個實(shí)現(xiàn),都不知道該看哪個?

論壇徽章:
0
2 [報告]
發(fā)表于 2014-08-28 13:29 |只看該作者
沒看過這方面權(quán)威的資料,冥冥之中感覺malloc函數(shù)不可重入是因?yàn)闆]有鎖,不過聽某些人說有線程安全的malloc函數(shù)應(yīng)該是帶鎖的
關(guān)于優(yōu)先級翻轉(zhuǎn)的問題,我覺得在基于優(yōu)先級搶占的嵌入式操作系統(tǒng)上體現(xiàn)才明顯,而基于優(yōu)先級搶占的嵌入式系統(tǒng)我覺得一般都應(yīng)該是單進(jìn)程的,像linux這種多進(jìn)程的操作系統(tǒng)來說我實(shí)現(xiàn)是想象不出優(yōu)先級搶占的優(yōu)點(diǎn)(用戶進(jìn)程的優(yōu)先級搶占)。
本人只嵌入式操作系統(tǒng)有一點(diǎn)了解,如有說錯請噴!

論壇徽章:
0
3 [報告]
發(fā)表于 2014-08-28 15:51 |只看該作者
現(xiàn)在malloc的大多情況都是不存在鎖競爭的,很多實(shí)現(xiàn)都有thread local的內(nèi)存池的。

如果有鎖同步就不要談什么優(yōu)先級了吧,你自己的鎖依賴還怪人家系統(tǒng)。 就算這樣,我覺得這種鎖競爭導(dǎo)致的整個時間片影響有限吧,如果這都影響的到那就不是優(yōu)先級的問題了。

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(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