簡體   English   中英

一勞永逸的std :: thread對象清理自己

[英]Fire-and-forget std::thread objects cleaning themselves up

在實現服務等時,可能需要即棄即用功能,即創建線程並將其留給自己的設備。 但是,需要將std::thread對象保持在某處以防止其超出范圍,但是當線程完成時,並沒有整齊的delete this支持,即使有,對於非指針分配。 類似地,更高級別的庫可能具有Timer對象,在該對象中可能會觸發一鍵式計時器,但完成后需要清除。

也許可以保留一組std::threadTimer對象,並且每隔一段時間就會遍歷該列表並刪除完成的對象,但這似乎很麻煩。 有一些有用的成語來管理這些臨時工嗎?

我的直接解決方案是使用std::mutexstd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM