2013-07-10 29 views
0

我使用普通的舊c。使非重入函數重入

我有一個函數使用靜態局部變量,因此是不可重入的。我想刪除靜態本地的使用並使該功能可重入。

有關如何操作的任何提示或設計建議?

這個問題太模糊了嗎?它是否需要關於我目前正在使用的設計的更多細節?還是在這種情況下可以遵循的一般設計模式?

+0

您通常無法對現有功能進行操作,您需要使用不同的界面創建新功能。例如,看看'strtok()'和'strtok_r()'之間的區別。 – Barmar

+0

*是否需要更多關於我目前正在使用的設計的細節?*是的,它需要更多細節。 – 0decimal0

+0

看看這篇文章:http://stackoverflow.com/questions/261311/what-is-the-difference-between-re-entrant-function-and-recursive-function-in-c – 0decimal0

回答

1

而不是使用靜態本地維護狀態,讓調用者將這些狀態變量作爲參數傳遞給您的函數。這意味着你的來電者必須保持狀態,但這通常是你想要的。

0

你可以用這個解決方案的一個保護代碼:

  1. 使用互斥信號燈與靜態變量。
  2. 禁用功能前的中斷,並在完成後啓用它。
  3. 禁用多任務系統的調度。
  4. 使用局部變量。