使用std::thread 來增強應用程式效能時,理解這一點至關重要呼叫detach() 和不呼叫detach() 之間的差異。
不呼叫detach(),所建立的執行緒在自己的執行路徑內獨立運作。在這種情況下:
void Someclass::Somefunction() { //... std::thread t([ ] { printf("thread called without detach"); }); //some code here }
主線程將執行“此處的一些代碼”,而新創建的線程打印“線程調用而不分離。”
調用detach()會改變執行緒與主執行緒互動的方式:
void Someclass::Somefunction() { //... std::thread t([ ] { printf("thread called with detach"); }); t.detach(); //some code here }
現在,主執行緒將在執行緒啟動後立即執行「此處的一些程式碼」。重要的是,detach() 不會等待線程完成。
根據上述差異,請考慮以下準則:
僅在下列情況下使用detach():
注意:
需要注意的是,當程式終止(即main傳回)且分離執行緒仍然存在時運行時,它們的堆疊不會展開,可能會導致析構函數未執行。這可能會導致資料損壞和其他不良後果。
以上是分離或不分離:什麼時候應該使用`std::thread::detach()`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!