C++多线程编程第十三讲--补充知识
2021/11/3 9:09:42
本文主要是介绍C++多线程编程第十三讲--补充知识,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
//(1)补充一些知识点 //(1.1)虚假唤醒 // wait(), notify_one(), notify_all() 使用非常频繁的接口 // 虚假唤醒是指没有满足条件的时候被唤醒了。 //(1.2)atomic #include<iostream> #include<thread> #include<vector> #include<list> #include<mutex> using namespace std; class A { public: atomic<int> ato; A() { ato = 0; //std::atomic<int> ato2 = ato; //这种赋值操作是不被允许的 //std::atomic<int> ato2(ato.load()); //正确的,需要load函数来辅助 //ato.store(12); // 正确,用来赋值的操作。 } //把收到的消息,入到一个队列中 void inMsgRecvQueue() { int i; for (i = 0; i < 100000; ++i) { ato++; //ato = ato + 1; //不是原子操作 } } //把数据从消息队列中取出 void outMsgRecvQueue() { while (true) { // cout << "ato = " << ato << endl; } } private: list<int> msgQueue; mutex my_mutex; //创建一个互斥量 std::condition_variable cond; }; int main() { A myobj; thread myOutMsg(&A::outMsgRecvQueue, std::ref(myobj)); //保证线程中用的同一个对象 thread myInMsg(&A::inMsgRecvQueue, std::ref(myobj)); thread myInMsg2(&A::inMsgRecvQueue, std::ref(myobj)); myOutMsg.join(); myInMsg.join(); myInMsg2.join(); cout << "main thread end..." << endl; return 0; }
这篇关于C++多线程编程第十三讲--补充知识的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享