如果我在最後的程序中不使用sem_destroy,它可能會導致什麼影響?會發生一些嚴重的問題嗎?如果我不摧毀信號量會發生什麼?
回答
它是特定於操作系統的。在Linux上,請閱讀sem_overview(7);實際上你是處於一個不確定的情況。然而,文件說,
的使用前,一位不願透露姓名信號必須使用sem_init初始化 (3)。然後可以使用 sem_post(3)和sem_wait(3)進行操作。當信號量不再需要 ,並且在其所在的存儲器被解除分配之前,應該使用 sem_destroy(3)銷燬信號量。
所以你應該叫sem_destroy
在適當的時候;不要冒全系統資源泄漏的風險。順便說一句的sem_destroy(3)文檔講述:
的未命名信號應與 在其所位於被釋放存儲器前sem_destroy()被破壞。如果不執行此操作,可能會導致某些實現出現資源泄漏。
對於命名爲信號燈,情況就不同了(他們坐在/dev/shm/
)。我想線程共享信號可能會被刪除,當其內存段被刪除(不再有任何進程映射)。我不確定這一點,它是特定於實現的行爲,所以不要依賴於此。
也使用proc(5)。
那麼可以發生是全系統resource leak,你不想要它。您可能需要重新啓動才能將其刪除。順便說一下,你可以使用strace(1)找出涉及的實際系統調用,並且可以查看GNU glibc(或其他一些libc,如musl-libc)的源代碼 - 也許可以是Linux內核 - 以瞭解更多實現特定行爲。
好吧,你的意思是分配給程序的資源不會被分配,除非我銷燬信號量? – Mike3162114 2014-10-29 06:25:08
是的*可能會發生(或可能不會!)。確切的行爲是未定義的,並且是特定於實現的。 – 2014-10-29 06:28:42
其中旗語存儲,如果你不使用sem_destroy將持有信號量的最後一個值的地址...
這可能會導致問題,因爲信號燈的前值可能表明一個過程仍在運行,即使不是這樣 !
什麼問題,這就是問題所在。 – Mike3162114 2014-10-29 06:20:03
- 1. Qt:如果你發送信號太快會發生什麼?
- 2. 當信號量在RTOS中發佈或發信號時會發生什麼?
- 3. PHP會話摧毀試圖摧毀未初始化會話
- 4. 未能獲得信號量的線程會發生什麼?
- 5. 爲什麼信號不會觸發?
- 6. DatastoreService批量刪除。如果發生異常,會發生什麼
- 7. 當我滾動時摧毀效果
- 8. 模型X和模型Y每個has_many Z,:dependent =>:destroy。如果我摧毀X,Z是否會被摧毀?
- 9. 即時摧毀PHP會話
- 10. Laravel會議摧毀實施
- 11. 部隊摧毀Servlet會話
- 12. 摧毀大多數會話
- 13. 如果不清除ThreadLocal變量,會發生什麼情況?
- 14. 摧毀一個類是什麼意思
- 15. 「摧毀」不生產 - Rails應用程序
- 16. 如果我不直接調用willMoveToParentViewController&didMoveToParentViewController,會發生什麼?
- 17. 如果我們不進行軟件測試會發生什麼
- 18. 如果我在鏈接時不使用-g,會發生什麼
- 19. 如果我不執行部分方法會發生什麼?
- 20. 如果我不打電話給session_start(),會發生什麼?
- 21. 如果我不調用transaction.close或transaction.rollback,會發生什麼情況?
- 22. 如果我不指定targetFramework =「4.0」,會發生什麼情況?
- 23. 如果我不取消上下文會發生什麼?
- 24. 如果我不處理音頻中斷會發生什麼?
- 25. 如果我不'刪除'會發生什麼?
- 26. 如果我們不取消註冊BroadcastReceiver會發生什麼?
- 27. 如何摧毀libgdx
- 28. 如何摧毀PHP
- 29. 如果主從站無法通信會發生什麼?
- 30. 如果我把不可用的值放在JavaScript變量中會發生什麼?
我聽說它可能導致內存泄漏,會發現更多並回答它。 – 2014-10-29 05:44:21
鑑於你提到'sem_destroy',我們在談論用C編寫的程序嗎? – 2014-10-29 05:46:34
試圖找出RTFM的含義。 – 2014-10-29 06:08:21