reentrancy

    1熱度

    1回答

    在編寫目錄迭代器時,我發現readdir函數不可重入。 readdir_r函數似乎重入版本,但我不知道如何確認這一點。雖然readdir明確標記爲不可重入,但沒有提及readdir_r。 有沒有辦法檢查特定POSIX函數的重入性?如何檢查POSIX函數的重入性?

    0熱度

    1回答

    實踐: 從我的理解,一個可能要允許代碼關鍵部分的運行,不會中斷。 可以通過阻止標準信號等中斷來實現。 衝突: 我如何能夠處理從一個關鍵部分的代碼中發生故障/標準信號。 我能想到的一個經典例子是分配內存失敗。 甚至更​​好,由於地址無效而無法釋放內存。 從我理解的「alloc/free」部分開始的內存操作確實屬於臨界區部分。 我有什麼企圖: 我曾嘗試搜索周圍,以及學習的信號和重入主題, 但是我偶然發

    31熱度

    1回答

    之間從docs的區別:() threading.RLock - 一個工廠函數返回一個新的重入鎖對象。重入鎖必須由獲取它的線程釋放。一旦一個線程獲得了一個可重入的鎖,同一個線程可以再次獲得它而不會阻塞;線程每次獲取它時都必須釋放一次。 我不知道爲什麼我們需要這個? 什麼Rlock和Lock之間的區別? 感謝

    4熱度

    2回答

    我正在使用GCD爲類添加線程安全性。 我班的一些公共方法被其他公共方法調用。但是,這會導致重入鎖定問題:如果我使用同步GCD塊(在某些情況下)保護適當的公開可見方法,則重用意味着有時我會嘗試在當前隊列上運行另一個同步塊,這會導致死鎖。 什麼是最優雅的解決方案?一個顯而易見的方法是使用適當方法的內部版本,沒有任何GCD塊,以及具有GCD塊的外部公開版本的方法將調用包裝到interal方法中。這不太適

    10熱度

    1回答

    我聽說在C中,main()是可重入的,而在C++中不是。 這是真的嗎?重新進入main()函數的場景是什麼?

    6熱度

    2回答

    我想禁止大量方法的重入。 的單一方法的工作原理是代碼: bool _isInMyMethod; void MyMethod() { if (_isInMethod) throw new ReentrancyException(); _isInMethod = true; try { ...do something...

    0熱度

    1回答

    我有將打印輸出打印到UART的函數。如果在此函數工作時發生中斷,那麼調試中斷輸出將中斷先前的調試文本。所以我有這樣的事情: 「03:32:46加載數據fr03:32:46按鈕按下」。 我考慮一些解決方案。我更喜歡不禁用中斷,而不是禁用調試輸出,如果它打破其他調試打印功能。 解決這個問題的好方法是什麼?

    0熱度

    2回答

    我使用普通的舊c。 我有一個函數使用靜態局部變量,因此是不可重入的。我想刪除靜態本地的使用並使該功能可重入。 有關如何操作的任何提示或設計建議? 這個問題太模糊了嗎?它是否需要關於我目前正在使用的設計的更多細節?還是在這種情況下可以遵循的一般設計模式?

    5熱度

    1回答

    我通過試驗發現創建持續時間爲0的定時器允許我將工作推遲到事件隊列中。我非常喜歡這個功能,因爲它可以避免很多令人討厭的重入問題。這種有意義的功能不會改變嗎?可以將它添加到文檔中嗎?如果沒有,是否有支持的方式來執行此操作?

    4熱度

    1回答

    給定一個C函數庫,如果導出的函數是可重入的,是否有自動驗證的方法? 可以在運行時(如果需要檢測後)或代碼分析。源代碼可用。 注意:這不是一個std-C庫,也不是一個帶有線程安全契約的良好記錄的GNU庫。