c++ 异步下获取线程执行结果_【分享吧】C++11多线程库介绍
前言
对于c/c++程序员来说,编写跨平台的多线程代码十分的麻烦,因为线程的创建,同步接口在windows/linux平台上差别非常大。好在c++11标准新增了线程库,终于可以编写跨平台的多线程代码了,现在我们就一起了解一下c++11新增了哪些线程相关的类。
std::thread – 创建线程
在创建thread变量的同时,可以传递线程函数所需参数,十分便捷。另外可以通过get_tid()获取线程的tid,通过join等待线程返回,通过detach将线程分离。
std::yield - 线程重调度
当线程在某些情况可以让出当前cpu时间片时,可以调用此函数,以提高其他线程的执行效率。
std::this_thread::sleep_for – 线程睡眠
此函数会阻塞当前线程,直到指定的睡眠时间到达。
std::mutex – 线程间互斥
std::mutex配合std::lock_guard,可以实现在某个作用域进入时自动加锁,退出时自动解锁,也可以手动调用lock/try_lock/unlock来手动控制锁的行为。
std::call_once – 单次调用
某些场景下,我们需要代码只被执行一次,比如单例类的初始化,考虑到多线程安全,需要进行加锁控制。C++11中提供的call_once可以很好的满足这种需求,实用又非常简单。
std::condition_variable – 条件变量
条件变量一般用于等待某个事件发生,需要配合互斥锁一起使用。c++11中没有提供信号量相关的类,需要等到c++20。
std::async +future – 异步运行任务
调用async异步开启一个新的线程执行某个任务,返回的future变量代表任务执行结果,当future.get()返回时,代表任务执行完毕,返回值即任务的返回值。
std::promise – 异步传值
除了在线程函数返回值以外,还可以通过promise对象来设定future对象的值。一个promise实例只能与一个future关联共享状态,当在同一个promise上反复调用get_future会抛出future_error异常。当promise对象调用set_value时,future对象的get即可返回对应值。
结语
以上这些类基本可以覆盖我们平时编写多线程业务逻辑的需求范围,接口简洁易懂,推荐大家使用。
与50位技术专家面对面20年技术见证,附赠技术全景图总结
以上是生活随笔为你收集整理的c++ 异步下获取线程执行结果_【分享吧】C++11多线程库介绍的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: python文本分类_教你用python
- 下一篇: string 字符串中字符无效_7.3