假如,main()中正在調(diào)用A()函數(shù).在此期間,有一中斷,在中斷服務(wù)程序中還要調(diào)用A().
站在用戶的角度思考問題,與客戶深入溝通,找到囊謙網(wǎng)站設(shè)計與囊謙網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名注冊、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋囊謙地區(qū)。
如果這個A()可以被調(diào)用就算是可重入
反之算不可重入.
可重入與不可重入的區(qū)別在這個函數(shù)的內(nèi)容是否會相互沖突...例如A()中有個靜態(tài)變量...就不可以..
若一個程序或子程序可以安全的被并行執(zhí)行,則稱其為可重入(reentrant或re-entrant)的;即,當(dāng)該子程序正在運行時,可以再次進入并執(zhí)行它。若一個函數(shù)是可重入的,則該函數(shù):不能含有靜態(tài)(全局)非常量數(shù)據(jù)。 不能返回靜態(tài)(全局)非常量數(shù)據(jù)的地址。 只能處理由調(diào)用者提供的數(shù)據(jù)。 不能依賴于單實例模式資源的鎖。 不能調(diào)用不可重入的函數(shù)。 多'用戶/對象/進程優(yōu)先級'以及多進程一般會使得對可重入代碼的控制變得復(fù)雜。同時,IO代碼通常不是可重入的,因為他們依賴于像磁盤這樣共享的、單獨的資源??芍厝胄允呛瘮?shù)編程語言的關(guān)鍵特性之一。 例子在以下的C語言代碼中,函數(shù)f和函數(shù)g都不是可重入的。int g_var = 1;int f(){ g_var = g_var + 2; return g_var;}int g(){ return f() + 2;}以上代碼中,f使用了全局變量 g_var,所以,如果兩個線程同時執(zhí)行它并訪問g_var,則返回的結(jié)果取決于執(zhí)行的時間。因此,f不可重入。而g調(diào)用了f,所以它也不可重入。稍作修改后,兩個函數(shù)都是可重入的:int f(int i){ return i + 2;}int g(int i){ return f(i) + 2;}
C語言的IO函數(shù)都是有緩沖的流,需要有全局變量維護狀態(tài),所以一般都是不可重入的。
我的理解。
標準C, 不支持函數(shù)重載。
函數(shù)重載是C++的概念。 不光是類的成員函數(shù), 一般函數(shù)以及模板函數(shù)都是可以重載的。
如果只讀,那怎么用都行。如果有寫的操作,最好避開,實在避不開就要用信號量等機制防止多線程沖突。
另外就是調(diào)用的函數(shù)要線程安全, thread-safe.具體那些函數(shù)線程安全,需要查閱手冊。
分享標題:c語言可重入函數(shù),編寫可重入函數(shù)需要注意什么
網(wǎng)站鏈接:http://www.ekvhdxd.cn/article8/phcoop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、網(wǎng)站設(shè)計、網(wǎng)站設(shè)計公司、搜索引擎優(yōu)化、Google、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)