欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

c++ 异步下获取线程执行结果_【分享吧】C++11多线程库介绍

发布时间:2025/3/19 29 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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多线程库介绍的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。