VC2010增加对并发的支持 笔记一

来源:互联网 发布:苹果6突然只有2g网络 编辑:程序博客网 时间:2024/06/05 22:32
struct DoWrite{DoWrite(Concurrency::critical_section &cs,std::list<int> &List,volatile bool &bRun):_cs(cs),_List(List),_bRun(bRun){}void operator()() const{for(;_bRun;Sleep(100)){Concurrency::critical_section::scoped_lock _lock(_cs);for(int i(0);i<3;++i)_List.push_back(rand());}}Concurrency::critical_section &_cs;std::list<int> &_List;volatile bool &_bRun;};struct DoRead{DoRead(Concurrency::critical_section &cs,std::list<int> &List,volatile bool &bRun):_cs(cs),_List(List),_bRun(bRun){}void operator()() const{for(;_bRun;Sleep(100)){Concurrency::critical_section::scoped_lock _lock(_cs);for_each(_List.begin(),_List.end(),[](int i){cout<<i<<ends;});cout<<endl;_List.clear();}}Concurrency::critical_section &_cs;std::list<int> &_List;volatile bool &_bRun;};int main(int argc, char* argv[]){ Sleep(10000);//此时只有一个线程if(1){SchedulerPolicy policy(1, MaxConcurrency, 30);//最多可以30个并发CurrentScheduler::Create(policy);task_group tg;volatile bool bRun(true);Concurrency::critical_section cs;std::list<int> List;tg.run(DoWrite(cs,List,bRun));tg.run(DoRead(cs,List,bRun));Sleep(20000);//此时有5个线程(貌似 CPU核数*2+1)bRun = false;tg.wait();}cout<<"结束"<<endl;Sleep(10000);}


原创粉丝点击