C++ 之 并发编程基础
2021/4/28 20:55:19
本文主要是介绍C++ 之 并发编程基础,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
C++并发编程基础
在C++线程库中提供一个native_handle()
成员函数,允许通过使用平台相关API直接操作底层实现。
为了并发地运行函数,需要使用特定的函数以及对象来管理各个线程。C++在头文件
一个简单的Hello, Concurrent World程序:
#include <iostream> #include <thread> //① void hello() //② { std::cout << "Hello Concurrent World\n"; } int main() { std::thread t(hello); //③ t.join(); //④ }
其中 调用方法std::thread
,可见仍属于std域;同时使用join
函数是为了保证t
线程执行完毕后main
主线程才结束。
启动线程
线程在线程对象创建时启动,即构造线程std::thread
对象时便会启动。也就是说我们需要进行共享变量的设置才可以实现线程之间的相互控制。
- 三种构建方法:
std::thread my_thread(background_task); // 1 std::thread my_thread((background_task())); // 2 std::thread my_thread{background_task()}; // 3
- 启动线程之后,需要明确是要等待线程结束(加入式),还是让其自主运行(分离式)
t.detach(); //(分离式),new和current线程无关 t.join(); //(加入式),阻塞current线程,执行新线程
- 线程间的变量修改则需要使用
std::ref()
将数据转换为引用数据:
std::thread t(update_data_for_widget,w,std::ref(data));
数据同步的安全性实现
std::mutex mt; void addmethod(int a) { mt.lock(); addprocessing(...); mt.unlock(); } void deletemethod(int a) { mt.lock(); deleteprocessing(...); mt.unlock(); }
使用unique_lock或者lock_guard实现上锁。
std::mutex mt; void addmethod(int a) { std::unique_lock<std::mutex> lock(mt); addprocessing(...); } void deletemethod(int a) { std::unique_lock<std::mutex> l(mt); deleteprocessing(...); }
这篇关于C++ 之 并发编程基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-07fastcgi 是什么-icode9专业技术文章分享
- 2024-10-07fastcgi 的详细使用教程介绍-icode9专业技术文章分享
- 2024-10-07git如何更新单个文件到本地-icode9专业技术文章分享
- 2024-10-07如何使用ASM(Abstract Syntax Tree Manipulation)技术来修改第三方AAR依赖中的函数-icode9专业技术文章分享
- 2024-10-07Activity 跳转时间耗时很长怎么优化解决-icode9专业技术文章分享
- 2024-10-07Androud Toast 有哪些常用的第三方组件-icode9专业技术文章分享
- 2024-10-07在viewmodel中怎么使用 mmkv?-icode9专业技术文章分享
- 2024-10-07MMKV.defaultMMKV() 是单例模式吗?-icode9专业技术文章分享
- 2024-10-04el-table 开启定时器下,表格的选中状态会消失是什么原因-icode9专业技术文章分享
- 2024-10-03如何安装和初始化飞牛私有云 fnOS?-icode9专业技术文章分享