yield函式時c++11的新特性,它在std::this_thread::yield命名空間中實現,函式宣告如下:
void yield() noexcept;
其作用是當前執行緒「放棄」執行,讓作業系統排程另一線程繼續執行
比如說你的執行緒需要等待某個操作完成,如果你直接用乙個迴圈不斷判斷這個操作是否完成就會使得這個執行緒佔滿cpu時間,這會造成資源浪費。這時候你可以判斷一次操作是否完成,如果沒有完成就呼叫yield交出時間片,過一會兒再來判斷是否完成,這樣這個執行緒占用cpu時間會大大減少。,例如:
while(!isdone()); // bad
while(!isdone()) yield(); // good
**示例:
#include "stdafx.h"
#include #include #include #include #include std::mutex g_mutex;
std::atomicready(false);
void count1m(int id)
for ( int i = 0; i < 1000000; ++i) {}
std::lock_guardlock(g_mutex);
std::cout << "thread : "<< id << std::endl;
}int main()
ready = true; // go!
for (auto& th : threads)
std::cout << '\n';
return 0;
}
執行結果:
參考資料:
C 中的 yield 使用
yield是c 為了簡化遍歷操作實現的語法糖,我們知道如果要要某個型別支援遍歷就必須要實現系統介面ienumerable,這個介面後續實現比較繁瑣要寫一大堆 才能支援真正的遍歷功能。舉例說明 using system using system.collections.generic using sy...
C 中yield的使用
yield關鍵字向編譯器指示它所在的方法是迭代器塊。編譯器生成乙個類來實現迭代器塊中表示的行為。在迭代器塊中,yield 關鍵字與 return 關鍵字結合使用,向列舉器物件提供值。這是乙個返回值,例如,在 foreach 語句的每一次迴圈中返回的值。yield 關鍵字也可與 break 結合使用,...
C 中的 yield 使用
yield是c 為了簡化遍歷操作實現的語法糖,我們知道如果要要某個型別支援遍歷就必須要實現系統介面ienumerable,這個介面後續實現比較繁瑣要寫一大堆 才能支援真正的遍歷功能。舉例說明 using system using system.collections.generic using sy...