[英]Fire-and-forget std::thread objects cleaning themselves up
在實現服務等時,可能需要即棄即用功能,即創建線程並將其留給自己的設備。 但是,需要將std::thread
對象保持在某處以防止其超出范圍,但是當線程完成時,並沒有整齊的delete this
支持,即使有,對於非指針分配。 類似地,更高級別的庫可能具有Timer
對象,在該對象中可能會觸發一鍵式計時器,但完成后需要清除。
也許可以保留一組std::thread
和Timer
對象,並且每隔一段時間就會遍歷該列表並刪除完成的對象,但這似乎很麻煩。 有一些有用的成語來管理這些臨時工嗎?
我的直接解決方案是使用std::mutex
和std::atomic
來使我的服務返回BUSY
所以我只有一個線程,但是感覺像是代碼氣味
這就是std :: thread :: detach()的目的-如果您希望線程“火起來”而忘記了,那么在創建它之后就調用detach
。 這將導致std:thread對象不再引用實際的執行線程,因此您可以銷毀std :: thread,並且對執行沒有影響。
如果有很多“一勞永逸”的功能,則可以考慮使用Thread Pool
。 創建和銷毀線程會產生開銷,並且其中很多可能會占用RT中的RAM。 線程池為您啟動X線程為您服務,它將為您管理每個“即發即棄”線程。
std::mutex
與管理線程的資源無關,而與同步線程有關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.