看板 C_and_CPP 關於我們 聯絡資訊
小弟有個問題想請教 就是可重入函式的定義: 一段可以被多個任務(task或isr)同時呼叫,而不必擔心資料 會被破壞的程式碼。 今天假如我寫一個函式,裡面就是去寫memory map io Register。然後函式 可給多個任務去使用。請問我這函式是可重入還是不可重入???? 我自己想我這函式又沒用到全域變數,應該算可重入但那暫存器又是共用的 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.227.244.202
hpps:沒全域變數,但大家一起搶一個共享的東西,應該也會有race 04/03 17:27
hpps:像是很多thread一起執行一個讀檔的函式,但傳進去的檔案指標 04/03 17:31
hpps:指向同一個已開啟檔案,這樣也是沒用到全域變數 04/03 17:32
rtes:但依然是需要保護那檔案的一致性嗎???? 04/03 17:55
hpps:沒寫過memory map io Register相關的操作,可能要實驗看看 04/03 18:11
zetab:不一定 這要看你函式的寫法和register的操作方式 04/03 21:23
descent:除非是 atomic read/write, 否則還是有 race condition 04/03 21:38
descent:memory map io Register address 和全域變數是一樣意思。 04/03 21:39
legnaleurc:你是要 reentrant 還是 thread-safe? 04/03 22:07
rtes:請問要怎分辨我要是可重入或是thread safe 04/03 22:15
rtes:因為我考慮的情況是我的任務呼叫函式時,可能會被外部硬體中 04/03 22:16
rtes:被外部硬體中斷,因而導致這函式又被其他任務呼叫 04/03 22:17
descent:可以用 mutex/semaphore lock 那個 register 04/03 22:26