可重入c語言,c語言重寫函數

本文目錄一覽:

單片機C語言設計里說的可重入函數是什麼?和不可重入函數的區別是什麼?

一、可重入函數

1)什麼是可重入性?

可重入(reentrant)函數可以由多於一個任務並發使用,而不必擔心數據錯誤。相反, 不可重入(non-reentrant)函數不能由超過一個任務所共享,除非能確保函數的互斥(或者使用信號量,或者在代碼的關鍵部分禁用中斷)。可重入 函數可以在任意時刻被中斷,稍後再繼續運行,不會丟失數據。可重入函數要麼使用本地變量,要麼在使用全局變量時保護自己的數據。

2)可重入函數:

不為連續的調用持有靜態數據。

不返回指向靜態數據的指針;所有數據都由函數的調用者提供。

使用本地數據,或者通過製作全局數據的本地拷貝來保護全局數據。

如果必須訪問全局變量,記住利用互斥信號量來保護全局變量。

絕不調用任何不可重入函數。

3)不可重入函數:

函數中使用了靜態變量,無論是全局靜態變量還是局部靜態變量。

函數返回靜態變量。

函數中調用了不可重入函數。

函數體內使用了靜態的數據結構;

函數體內調用了malloc()或者free()函數;

函數體內調用了其他標準I/O函數。

函數是singleton中的成員函數而且使用了不使用線程獨立存儲的成員變量 。

總的來說,如果一個函數在重入條件下使用了未受保護的共享的資源,那麼它是不可重入的。

什麼是C語言的可重入函數?怎麼使用?

假如,main()中正在調用A()函數.在此期間,有一中斷,在中斷服務程序中還要調用A().

如果這個A()可以被調用就算是可重入

反之算不可重入.

可重入與不可重入的區別在這個函數的內容是否會相互衝突…例如A()中有個靜態變量…就不可以..

什麼是可重入程序?舉出一個不重入程序的例子

若一個程序或子程序可以安全的被並行執行,則稱其為可重入(reentrant或re-entrant)的;即,當該子程序正在運行時,可以再次進入並執行它。若一個函數是可重入的,則該函數:不能含有靜態(全局)非常量數據。 不能返回靜態(全局)非常量數據的地址。 只能處理由調用者提供的數據。 不能依賴於單實例模式資源的鎖。 不能調用不可重入的函數。 多’用戶/對象/進程優先級’以及多進程一般會使得對可重入代碼的控制變得複雜。同時,IO代碼通常不是可重入的,因為他們依賴於像磁盤這樣共享的、單獨的資源。可重入性是函數編程語言的關鍵特性之一。 例子在以下的C語言代碼中,函數f和函數g都不是可重入的。int g_var = 1;int f(){ g_var = g_var + 2; return g_var;}int g(){ return f() + 2;}以上代碼中,f使用了全局變量 g_var,所以,如果兩個線程同時執行它並訪問g_var,則返回的結果取決於執行的時間。因此,f不可重入。而g調用了f,所以它也不可重入。稍作修改後,兩個函數都是可重入的:int f(int i){ return i + 2;}int g(int i){ return f(i) + 2;}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/238523.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:11
下一篇 2024-12-12 12:11

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字符串操作中,capitalize函數常常被用到,這個函數可以使字符串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • 單片機打印函數

    單片機打印是指通過串口或並口將一些數據打印到終端設備上。在單片機應用中,打印非常重要。正確的打印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的打印數據可以幫助我們快速…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python定義函數判斷奇偶數

    本文將從多個方面詳細闡述Python定義函數判斷奇偶數的方法,並提供完整的代碼示例。 一、初步了解Python函數 在介紹Python如何定義函數判斷奇偶數之前,我們先來了解一下P…

    編程 2025-04-29
  • Python實現計算階乘的函數

    本文將介紹如何使用Python定義函數fact(n),計算n的階乘。 一、什麼是階乘 階乘指從1乘到指定數之間所有整數的乘積。如:5! = 5 * 4 * 3 * 2 * 1 = …

    編程 2025-04-29

發表回復

登錄後才能評論