[英]C++ thread with a recursive function
void merge_sort_thread(vector<int>& array) {
if (1 < array.size()) {
vector<int> array1(array.begin(), array.begin() + array.size() / 2);
thread first= thread(merge_sort_thread,array1);
vector<int> array2(array.begin() + array.size() / 2, array.end());
thread second = thread(merge_sort_thread,array2);
first.join(); //wait for both ended
second.join();
merge (array1.begin(),array1.end(),array2.begin(),array2.end(),array.begin());
}
我正在使用Xcode構建和運行,這是構建失敗。 有提示:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/thread:332:5:嘗試使用已刪除的功能
我知道這里的線程效率不高,但是我想知道為什么這行不通。
std::thread
推導綁定參數的類型,並將其副本存儲在線程對象中。 在您的情況下,該參數被推論為參考。 但是,正如您所知,引用不能被復制。 如果要傳遞對std::thread
內部函數的引用,則可以使用std::ref
創建可復制的引用包裝器:
thread first(merge_sort_thread,std::ref(array1));
你做的copy initialization
(見這里 ),和線程不准是顯而易見的原因可復制的對象。
相反,請替換此類代碼
thread foo = thread(...);
有了這個
thread foo(...);
或者,如果您沒有恐懼症(例如我...)來編寫丑陋的代碼,並且您相信第11個C ++的承諾...
thread foo{...};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.