c++并发探索1-线程基本管理
2017-01-21 00:20
197 查看
一、创建线程
1.建立可调用对象2.创建thread对象并关联可调用对象
#include <iostream> #include <thread> using namespace std; class background_task { public: void operator()()const { cout<<this_thread::get_id()<<endl; } }; int main() { //注意这里的临时对象创建使用了括号; //避免被解释为函数声明 //或者,使用c++11语法{} //thread task{background_task()} thread task( (background_task() )); task.join();//task线程与main线程连接 }
二、线程基本管理
函数运行可以join(链接)、detach(分离)
1.join:阻塞在task.join()处,直到task结束返回
2.detach:函数从task.detach()处与主线程完全分离,并且不能再次join.此时如果main函数结束,程序退出,则分离的线程强制结束。
三、异常情况下退出
异常情况:在线程创建后,join()调用之前,程序发生异常。则join()不能被调用。处理:RAII原则 Resources Acquization Is Initialization
//thread对象是可移动,不可复制 {p23} //移动复制=,移动初始化均可 class thread_guard { explicit thread_guard(std::thread & t_):t(std::move(t_)) { } 4000 thread_guard(std::thread const & t_) = delete; //析构前必须显示等待线程完成join或者分离detach ~thread_guard() { if(t.joinable()) t.join() } }
线程数量
创建线程数量<=cpu核心数(std::hardware_concurrency()),就可以为每个线程单独分配一个cpu核心。减少线程切换带来的性能损耗。
相关文章推荐
- Java并发编程之线程管理(基本线程同步4)
- C++并发编程学习——2.管理线程
- Java并发编程之线程管理(基本线程同步2)
- Java并发编程之线程管理(基本线程同步5)
- POSIX多线程——基本线程管理函数介绍
- Ice笔记--C++线程与并发(二)
- .NET组件程序设计 第8章 多线程和并发管理 同步线程_信号
- .NET组件程序设计 第8章 多线程和并发管理 同步线程_互锁,读写锁
- 多线程并发执行---------------管理线程Boss做任务分发,n个Worker线程连续执行获得的任务
- C++并发实战12:线程安全的queue
- 【java多线程与并发库】---传统java多线程<1>线程基本概念
- POSIX多线程——基本线程管理函数介绍
- Java并发-基本的线程机制
- Ice 线程与并发 C++
- C++中高并发使用线程不安全类库的一种方法
- ICE笔记(08):C++线程与并发
- .NET组件程序设计 第8章 多线程和并发管理 同步线程_可等待事件
- POSIX多线程——基本线程管理函数介绍
- Ice笔记--C++线程与并发(二)
- Java并发操作——基本的线程机制