多线程
多线程学习
奋进在AI路上的小李
这个作者很懒,什么都没留下…
展开
-
6.C++多线程async、future、packaged_task、promise
(defer推迟,延期)表示线程入口函数的调用会被延迟,一直到std::future的wait()或者get()函数被调用时(由主线程调用)才会执行;如果wait()或者get()没有被调用,则不会执行。实际上根本就没有创建新线程。std::launch::deferred意思时延迟调用,并没有创建新线程,是在主线程中调用的线程入口函数。2、std::launch::async,在调用async函数的时候就开始创建新线程。async 可以创建线程,然后通过使用result.get()等待子进程运行结束。原创 2023-06-06 14:58:35 · 84 阅读 · 0 评论 -
5.C++多线程--单例设计模式
需要和标记(once_flag)配合使用,只要once_flag被设置为”已调用“,后续不在被调用。可在其他线程中使用notify_one和notify_all来唤醒此时的wait函数,单例设计模式:整个项目中,有某个或者某些特殊的类,属于该类的对象只能创建1个。如果wait函数里面有判断条件,则会判断条件是否符合,不符合则会等待;唤醒后,wait仍然会先判断是否满足条件,满足条件后再执行后面的语句。类对象可以调用wait函数,会将wait函数内的锁解开,双重锁定(双重检查)可以完成单例设计模式的完成。原创 2023-06-06 14:09:11 · 545 阅读 · 0 评论 -
4.C++多线程-- unique_lock(类模板)
使用之前先lock,不能自己unlockcout << "插入元素:" << i << endl;使用之前不能先lock, try_to_lock会自己先尝试进行加锁。如果不能加锁,通过判断直接执行其他defer_lock 见上public:i < 10000;i++) {cout << "插入元素:" << i << endl;cout << "容器为空" << endl;else {原创 2023-06-05 16:50:53 · 437 阅读 · 0 评论 -
3.C++多线程--数据共享问题
保护共享数据:互斥量(mutex)或者使用std::lock_guard<std::mutex> my_lock(my_mutex);使用lock_guard 在构造函数会调用mutex::lock(),析构函数调用 mutex::unlock();为了使用lock_guard,可以配合大括号使用。原创 2023-06-04 22:38:38 · 577 阅读 · 0 评论 -
2.C++多线程--危险点分析
使用detach时,子线程一定不要传入指针如果采用临时类对象作为参数,传入到thread中,thread会调用拷贝构造函数,对传入变量进行拷贝,然后再为自线程所使用。下面的代码采用引用来接收类对象,如果不采用引用的话,系统还会再构造一次对象,这样会出现3次构造,浪费时间。原创 2023-06-04 20:52:26 · 565 阅读 · 0 评论 -
1.C++多线程--创建线程
thread :一个用于创建线程的类;join():用于阻塞主线程,等待子线程完成后,再进行主线程;detach():主线程和子线程各自执行,不再需要主线程逐个等待子线程结束;一旦采用,子线程和主线程失去关联,子线程驻留后台完成。joinable():判断是否可以使用join和detach,可以返回true,否则返回false;原创 2023-06-03 21:18:15 · 226 阅读 · 0 评论