首页 > 代码库 > C++11线程指南(二)--Lambda线程实现
C++11线程指南(二)--Lambda线程实现
1. Thread with lambda function
基于前一章中的Lambda程序,我们进行了扩展,当前创建5个线程。#include<iostream> #include<thread> #include<vector> #include<algorithm> int main() { std::vector<std::thread> threadVec; for(int i=0; i<5; ++i){ threadVec.push_back(std::thread([]() { std::cout<<"thread function\n"; })); } std::cout<<"main thread\n"; std::for_each(threadVec.begin(), threadVec.end(), [](std::thread & thr) { thr.join(); }); return 0; }运行结果为:
thread function
thread function
thread function
main thread
thread function
thread function
2. 并发程序的特性
上述运行结果中,无法确定是哪个线程打印出了哪个结果。所以下面程序中插入一个标记。for(int i=0; i<5; ++i){ threadVec.push_back(std::thread([i]() { std::cout<<"thread function "<<i <<"\n"; })); } std::cout<<"main thread\n";得到的结果是:
thread function 0
thread function 3
main thread
thread function 2
thread function 1
thread function 4
或者
thread function 0
thread function 1
thread function main thread
3
thread function 4
thread function 2
从中可以看到,多线程并发有着天然的不确定性。每次运行都可以得到不同的结果。调度器可以在任意的时间被中断。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。