[問題] 可重入函式

看板C_and_CPP (C/C++)作者 (unbutu)時間13年前 (2013/04/03 15:47), 編輯推噓0(0013)
留言13則, 5人參與, 最新討論串1/1
小弟有個問題想請教 就是可重入函式的定義: 一段可以被多個任務(task或isr)同時呼叫,而不必擔心資料 會被破壞的程式碼。 今天假如我寫一個函式,裡面就是去寫memory map io Register。然後函式 可給多個任務去使用。請問我這函式是可重入還是不可重入???? 我自己想我這函式又沒用到全域變數,應該算可重入但那暫存器又是共用的 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.227.244.202

04/03 17:27, , 1F
沒全域變數,但大家一起搶一個共享的東西,應該也會有race
04/03 17:27, 1F

04/03 17:31, , 2F
像是很多thread一起執行一個讀檔的函式,但傳進去的檔案指標
04/03 17:31, 2F

04/03 17:32, , 3F
指向同一個已開啟檔案,這樣也是沒用到全域變數
04/03 17:32, 3F

04/03 17:55, , 4F
但依然是需要保護那檔案的一致性嗎????
04/03 17:55, 4F

04/03 18:11, , 5F
沒寫過memory map io Register相關的操作,可能要實驗看看
04/03 18:11, 5F

04/03 21:23, , 6F
不一定 這要看你函式的寫法和register的操作方式
04/03 21:23, 6F

04/03 21:38, , 7F
除非是 atomic read/write, 否則還是有 race condition
04/03 21:38, 7F

04/03 21:39, , 8F
memory map io Register address 和全域變數是一樣意思。
04/03 21:39, 8F

04/03 22:07, , 9F
你是要 reentrant 還是 thread-safe?
04/03 22:07, 9F

04/03 22:15, , 10F
請問要怎分辨我要是可重入或是thread safe
04/03 22:15, 10F

04/03 22:16, , 11F
因為我考慮的情況是我的任務呼叫函式時,可能會被外部硬體中
04/03 22:16, 11F

04/03 22:17, , 12F
被外部硬體中斷,因而導致這函式又被其他任務呼叫
04/03 22:17, 12F

04/03 22:26, , 13F
可以用 mutex/semaphore lock 那個 register
04/03 22:26, 13F
文章代碼(AID): #1HMzvqRl (C_and_CPP)
文章代碼(AID): #1HMzvqRl (C_and_CPP)