std::barrier arrive單獨使用andwait函式時,我不斷收到編譯器錯誤。
我一直在嘗試找到使用這些功能的示例,但我找不到它們,所以我現在只是在瘋狂拍攝。
它抱怨我的到達令牌不是右值,所以我將宣告更改為使用&&,但我不太熟悉右值的作業方式。
這是代碼:
void thread_fn(std::barrier<>& sync_point)
{
/* Do 1st task... */
std::barrier<>::arrival_token&& arrival = sync_point.arrive();
/* Do 2nd task... */
/* Wait for everyone to finish 1st task */
sync_point.wait(arrival);
/* Do 3rd task... */
}
我得到編譯錯誤:
test.cpp: In function ‘void thread_fn(std::barrier<>&)’:
test.cpp:12:21: error: cannot bind rvalue reference of type ‘std::barrier<>::arrival_token&&’ to lvalue of type ‘std::barrier<>::arrival_token’
12 | sync_point.wait(arrival);
| ^~~~~~~
uj5u.com熱心網友回復:
具有右值參考型別的變數是左值(arrival是左值)。
std::barrier<>::wait需要一個arrival_token&&,所以你需要從左值移動:
sync_point.wait(std::move(arrival));
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/472569.html
