C++11(五) thread

C++11标准中添加了线程以及对线程相关的类。

线程在头文件<thread>中定义。

线程的构造函数:

 

std::thread::thread
thread(); //只是创建了一个新的线程对象而并不能代表线程。
thread( thread&& other );  //移动构造函数,可以接受从另外一个线程那转移过来的线程。 
template< class Function, class... Args >
explicit thread( Function&& f, Args&&... args ); //支持可变参数。 f是代表函数, Args等代表传入函数的参数
thread(const thread&) = delete;    //禁止拷贝构造函数

 

获取线程ID有两个方法:

  • 调用Public function
  • 使用嵌套类(member classes)

 

线程的基本用法:

  

获取当前线程ID有两个方法:

  • 调用Public function
  • 使用嵌套类(member classes)

 

线程休眠

sleep::for()

互斥锁:

互斥锁又可以称为互斥量(mutex),是一种同步原语,是一种线程同步的手段,用来保护多线程同时访问的共享数据。另外线程同步手段也可以称为线程间通信。

  • mutex 独占式互斥锁,不能递归使用。
  • timed_mutex 带超时的独占互斥锁, 不能递归使用。
  • recursive_mutex 递归互斥锁, 不带超时功能。
  • recursive_timed_mutex 带超时的递归互斥锁。

 

递归锁允许同一线程多次获得该互斥锁,可以用来解决同一线程需要多次获取互斥量时死锁的问题。

 

条件变量:

条件变量时C++11提供的另外一种用于等待的同步机制,它能阻塞或多个线程,直到收到另外一个线程发出的通知或者超时,才会唤醒当前阻塞的线程。条件变量需要和互斥锁配合起来使用。

  • condition_variable

只能和std::unique<std::mutex>进行wait操作。

  • condition_variable_any

能和任意的lock、unlock语义的mutex搭配使用,比较灵活,效率比condition_variable差。

 

条件变量使用步骤:

  1. 拥有条件变量的线程获取互斥量
  2. 循环检查某个条件,如果条件不满足,则阻塞直到条件满足;如果条件满足,则向下执行。
  3. 某个线程满足条件执行完之后调用notify_one或notify_all唤醒一个或者所有的等待线程。

 

 

异步操作:

  • future
  • promise
  • package_task
  • future

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值