[英]How do I safely delete a posix timer in c++?
我正在編寫的類包含 posix 計時器和這些計時器的處理程序。
如何安全地刪除課程? 如果處理程序觸發並看到該類被刪除,則會出現段錯誤。
添加互斥鎖會導致死鎖 - 所以我想知道是否有任何資源可以在多線程環境中安全地在 c++ 類中使用 posix 計時器。
將計時器ID存儲為類的私有成員,從不返回ID,但始終將使用它們的調用包裝在類的方法中,並在析構函數中timer_delete()
( http://pubs.opengroup.org/onlinepubs /9699919799/functions/timer_delete.html )。 這樣,任何代碼都無法保存無效的計時器ID。 簡而言之,得墨meter耳定律。
您對死鎖的引用意味着問題是線程同步,因此shared_ptr
可能是解決之道。 僅在刪除最后一個對它的引用時,它才會刪除該類對象。 您可以嘗試其他方法,例如在屏障或條件變量后同步線程,並僅在知道每個持有對該對象引用的線程當前正在等待或讀寫器鎖定時才刪除。
根據glibc 維護者的說法,使用零時間調用timer_settime()
將解除計時器,讓您安全地調用timer_delete()
。 他們說這確保不會有進一步的回調。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.