簡體   English   中英

如果刪除其參數,則另一個線程中的std :: thread是否會崩潰?

[英]Does std::thread in another thread crash if its parameters are deleted?

我讀了很多書,仍然不確定我是否理解(我是木工)。

假設我有一個函數:

void class_test::example_1(int a, int b, char c)
{
//do stuff
int v;
int k;
char z;
if(condition)
    {
     std::thread thread_in_example (&class_test::example_1, & object, v ,k ,z);
     th.detach();
    }
}

現在,如果我稱之為:

std::thread example (&class_test::example_1, &object, a, b, c);
example.detach();

問題:當示例完成並“刪除”自己時, thread_in_example會怎樣? thread_in_example會失去對其參數的訪問權限嗎?

我以為std :: thread會復制元素,除非由&reference給出,但是在http://en.cppreference.com/w/cpp/thread/thread上我真的無法理解這一部分(我缺乏編程/英語/計算機科學語義學方面的知識):

std :: thread對象也可能處於不表示任何線程的狀態(在默認構造之后,從,移動,分離或聯接之后),並且執行線程可能未與任何線程對象關聯(在分離之后)。

這也是:

沒有兩個std :: thread對象可以表示同一執行線程; 盡管std :: thread是MoveConstructible和MoveAssignable,但它不是CopyConstructible或CopyAssignable。

因此,我對它的真正工作方式表示懷疑。

從此std::thread::detach參考

將執行線程與線程對象分開,從而允許執行獨立地繼續。 線程退出后,將釋放所有分配的資源。

[強調我的]

這些“已分配資源”中將包含參數,這意味着您仍然可以安全地在分離的線程中使用這些參數。

當然,除非您是參數,否則它們是對對象的引用或指針,這些對象是獨立於分離線程或創建分離線程的線程而被破壞的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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