![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
胜天半子_王二_王半仙
胜天半子——王二——王半仙儿是也
展开
-
C++多线程高并发,thread()和async()的区别
std::thread有可能计算机资源紧张,执行失败,而std::async(std::launch::async,mehtodName)强制创建一个线程但是我们一般不叫std::async()创建线程,而是创建一个异步任务,有的时候async并不创建新的线程1)如果用std::launch::deferred,延迟调用,使用get时进行,但是没有创建新的线程2)如果用std::launc...原创 2019-10-23 15:37:24 · 1882 阅读 · 0 评论 -
C++多线程高并发,mutex,recursive_mutex,timed_mutex,recursive_timed_mutex
mutex独占互斥量,只能加锁一次,不够人性化,我就是想加锁多次std::mutex globalMutex;recursive_mutex递归的独占互斥量,允许同一个线程,同一个互斥量,多次被lock,用法和非递归的一样 跟windows的临界区是一样的,但是调用次数是有上限的,效率也低一些std::recursive_mutex globalRecursiveMutex;tim...原创 2019-10-23 15:28:33 · 2015 阅读 · 0 评论 -
C++ vector的字符串排序
C++ vector的排序#include<algrothm>#include<vector>using namespace std;int main(){ vector<string> myVector = {"av","dewfwe","fwdvda","ffggtrgerf"}; //递增 std::sort(myVector.begin(...原创 2019-10-22 21:46:19 · 6104 阅读 · 0 评论 -
C++多线程高并发,原子操作atomic
首先看一下没有原子操作,多个线程对同一个整形++这里使用的是互斥量进行加锁,加了两千万此,花了大约4.5秒void threadEntryFunc(){ //大约4.5秒 for (int i = 1; i <= 10000000; i++) { myMutex.lock(); myNum++; myMutex.unlock(); }}int main(){...原创 2019-10-20 20:57:53 · 666 阅读 · 0 评论 -
C++多线程高并发 future_status,std::shared_future(std::future只能get一次的问题)
wait_for函数int threadEntryMethod(){ std::cout << "this thread id si " << std::this_thread::get_id() << std::endl; std::chrono::milliseconds dura(2000); std::this_thread::sleep_fo...原创 2019-10-20 19:17:21 · 981 阅读 · 0 评论 -
C++多线程高并发,packaged_task,future , promise
首先说packaged_task,future他到底是个什么意思呢?其实写下来感觉就是一个存方法的容器,也可以理解为给方法娶了一个别名,下面直接上代码,看完基本上就能从用法和本质上理解个差不多了玩法一,使用线程接收packaged_task,使用future接收结果//线程入口函数void threadEntryFunc(std::promise<int> &myPro...原创 2019-10-19 21:47:09 · 230 阅读 · 0 评论 -
C++多线程高并发,async,以及参数std::launch::deferred , std::launch::async
async就是设计模式里面的“未来模式”,不能立即得到结果,async:启动一个异步任务意思就是:自动创建一个线程,执行线程的入口函数,返回一个std::future对象 std::future可以得到线程入口函数的返回结果,使用方法get()即可 但是get函数只能调用一次,不能调用多次使用方法如下:int threadStepInMethod(){ std::cout <&...原创 2019-10-19 16:02:48 · 3836 阅读 · 0 评论 -
C++多线程高并发,condition_variable,wait,notify_one,notify_all
C++11中引入了condition_variable,wait,notify_one,notify_all等方法,对多线程编程的编写更加友好,对之前的std::mutex.lock/unlockstd::unique_lock<std::mutex> myUniqeLock(myMutex,adopt_lock/try_yo_lock/defer_lock)//进行了补充先...原创 2019-10-19 14:40:50 · 584 阅读 · 0 评论 -
C++多线程高并发,单例模式类的安全写法
#include <iostream>#include <mutex>#include <thread>std::mutex myMutex;//call_once的标记std::once_flag myFlag;class MyClassA{private: static MyClassA* classAInstance; //禁止在...原创 2019-10-17 19:46:29 · 337 阅读 · 0 评论 -
C++多线程,unique_lock
lock_guardunique_lock: 默认会自己加锁和释放锁uniquq_lock的第二个参数unique_lock:需要自己自己加锁try_to_lock:不能自己先加锁,不会自己阻塞,一旦不能得到锁,立即返回std::defer_lock:并没有给mutex加锁,初始化了一个没有加锁的mutex,使用方法如下:mutex myMutex;std::unique_lo...原创 2019-10-16 15:29:24 · 328 阅读 · 0 评论 -
lock_guard<mutex> name(mutex param)的坑点
理解了原理就很好理解他是在构造函数里面进行了传进去的参数的lock在析构函数里面进行了传进去参数的unlock所以有的时候使用lock_guard竟发现是全部同步的,一个全部执完,另一个在开始执行,这背离了我们的初衷主要原因就是要看好lock_guard的作用域,不退出作用域,他一直不销毁,这才出现了一个全部执行玩,再执行另一个的效果。如下面的例子,要是把addMethod , exMe...原创 2019-10-12 22:54:16 · 286 阅读 · 0 评论 -
C++学习路线,计划和根据实际情况的探索性实践,第三篇,深入了解指针的各种的用法
一,指针初始化时,最好赋上初值NULL/0在大多数的操作系统上,程序不允许访问地址为 0 的内存,因为该内存是操作系统保留的。然而,内存地址 0 有特别重要的意义,它表明该指针不指向一个可访问的内存位置。所以我们定义指针时,可以随手赋上一个初始值NULL/0,这样这个指针指向了一个不可访问的地址void testPtr_01(){ int* p = NULL; cout <<...原创 2019-10-12 14:47:53 · 121 阅读 · 0 评论 -
C++多线程 继续讨论多线程传参问题
王半仙儿不喜欢说废话,所以直接上代码讨论一class TestClassA{public: int myValue; //构造函数 TestClassA(int v) :myValue(v) { cout << "this is 构造函数 " << "this is : " << this << "thread :" << ...原创 2019-10-12 10:37:37 · 271 阅读 · 0 评论 -
C++多线程,给初始线程的函数传递参数的隐式转换和临时变量的讨论
给作为线程初始函数的函数传递传递参数时,为了解决不适用在主线程中传递进来的参数的原来的内存,希望使用一个新的内存来进行保存变量的值的时候,使用了隐式转换,如把char的数组转换为了string,你可以直接使用shift+f9进行debug的内存查看,也可以这样进行class A{public: int AInnerValue; //构造函数,这个构造函数,可以隐式地把int转换为A对象...原创 2019-10-09 21:25:44 · 572 阅读 · 1 评论 -
C++ 多线程,高并发,成员函数做线程函数
如果成员函数做线程函数的话,那么会有一个问题就是在主线程里,如果使用了thread.detach()方法,那么如何保证传递到作为线程函数的成员函数中的变量在主线程结束销毁之前,成功得到,并与主线程里的变量脱离内存关联?你会说,直接这样写void threadTest01(const int &a){ cout<<a<<endl;}int main...原创 2019-10-09 20:44:48 · 1114 阅读 · 0 评论 -
C++学习路线,计划和根据实际情况的探索性实践,第二篇,两个函数理解指针和引用
C++的指针和引用真是一个令人头痛的问题,不过我相信,只要有点计算机素养的人,看了下面两个函数,仔细理解了,就能区分它们之间的区别了,这两个函数是从菜鸟教程里面抄过来的首先,我们要理解,C++中,任何变量,都可以直接获取他们在内存中的地址,用符号&即可,如下void preTest(){ int a = 1; double b = 2; thread MyThread; co...原创 2019-10-09 19:04:15 · 101 阅读 · 0 评论 -
C++学习路线,计划和根据实际情况的探索性实践,开篇
开始学习C++了,两年之前只是简单的了解过C++的基础语法知识,现在要认真的学习一下C++了,并写下此博客,为了证明我之前的学习新的语言的方法的正确性:了解基础语法->进行算法题目练习,熟悉语法->进行语言深层次的学习,例如多线程,网络编程,内存方面等等这次刚开始,我就感觉到了,以上只是一个大致的路线图,每个人有每个人不同的情况,比如学习时间是碎片化的还是整体化的,这一次,我的实际...原创 2019-10-09 16:25:52 · 200 阅读 · 1 评论