多线程thread
小屁猪qAq
这个作者很懒,什么都没留下…
展开
-
1.5. C++并发 (初始化保护,只需要保护一次)
在初始化时保护共享数据 案例1. std::call_once使用,该案例中发送信息和接受信息都需要打开连接,但是这两个地方只需要调用一次打开连接即可。 class X { private: connection_info connection_detail; connection_handle connection; std::once_flag connection_init_flag;...原创 2020-04-02 14:28:03 · 177 阅读 · 0 评论 -
1.4. C++并发(线程之间共享数据)
多线程之间共享数据经常会产生竞争条件,当竞争条件破坏不变量时会导致问题的产生。比如多个线程对同一数据的修改可能会导致未定义行为,多线程中某一行为需要获取多个锁时可能会造成死锁。解决竞争条件产生的问题的解决方案通常有两个,一个是修改数据结构的设计,被称为无锁编程,另一个是使用互斥元保护共享数据。 案例1. 利用互斥元保护列表之简单实现 #include <list> #include &...原创 2020-04-01 16:29:38 · 1115 阅读 · 2 评论 -
1.3. C++并发(转移线程所有权,简单控制线程数量)
std::thread实例是可以转移的,但是不能复制,因此转移线程的所有权也是很重要的内容点。 案列1:转移线程所有权并且使用类进行线程管理(RAII) 该实例类比前面1.2中提到的thread_guard类不同之处在于管理类不是引用thread实例而是将thread实例所有权转移到了类中。 #include <thread> class scoped_thread { std::t...原创 2020-03-30 13:21:39 · 463 阅读 · 0 评论 -
0. C++并发(并发的两种方式)
两种并发方式: 进程和线程的区别 a、进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位) b、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。 而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。 c、线程之间的通信...原创 2020-01-17 10:49:09 · 364 阅读 · 0 评论 -
1-2. C++并发(线程传参)
如何向线程内传递参数 案例1: #include <thread> void f(int i, std::string const& s); std::thread t(f, 3, "hello"); 案例2:线程拷贝参数变量或引用参数变量 #include <thread> void update_data_for_widget(widget_id w, wid...原创 2019-10-14 11:30:55 · 173 阅读 · 0 评论 -
1-1. C++并发(创建线程)
创建线程 案例1:如何创建线程 #include <thread> void do_some_work(); std::thread my_thread1(do_some_work);//函数对象会复制到新线程的存储空间中,函数对象的执行和调用都在线程的内存空间中进行 class background_task { public: void operator()() const ...原创 2019-10-14 10:48:35 · 184 阅读 · 0 评论 -
C++并发(期望)
在C++标准库中,有两种“期望”,使用两种类型模板实现,声明在头文件中:唯一期望(unique futures)(std::future<>)和共享期望(shared futures)(std::shared_future<>) 案列1:使用std::future从异步任务中获取返回值 #include <future> #include <iostrea...原创 2019-10-09 16:16:02 · 829 阅读 · 0 评论 -
C++并发(利用线程分割任务)
example: 利用线程来分割任务 #include <iostream> #include <thread> #include<vector> #include <algorithm> #include <numeric> template<typename Iterator, typename T> struct ac...原创 2019-10-09 16:15:16 · 356 阅读 · 0 评论 -
C++并发(条件变量)
C++标准库对条件变量有两套实现:std::condition_variable和std::condition_variable_any,其中std::condition_variable_any的通用性更强,但是占用系统资源更多。 首先介绍如何使用std::condition_variable: 案例1:条件变量condition_variable的使用 #include <mutex&g...原创 2019-10-09 14:06:31 · 235 阅读 · 0 评论 -
c++ 多线程学习-thread库(3.1)单线程等待一个事件或者某个条件
当一个线程等待另一个线程完成任务时,有几种选择。 第一种,线程持续性的检查共享数据标志。但是这样会造成性能的浪费,而且重复性的访问势必会对数据进行长时间的上锁,从而造成其他线程无法访问,这样线程就会持续等待。 第二种,比第一种稍微好点,在线程等待时间内使用std::this_thread::sleep_for 进行周期性的间歇。但是在某些环境下会造成一些遗漏,例如一些高节奏游戏中很可能会造成丢...翻译 2018-08-31 15:18:36 · 4607 阅读 · 0 评论