C++并发编程
文章平均质量分 79
娱乐界祖师爷
这个作者很懒,什么都没留下…
展开
-
等待事件或条件(std::condition_variable)
std::condition_variable的使用原创 2022-10-16 18:24:31 · 1509 阅读 · 0 评论 -
保护共享数据的方式
互斥量是一种通用的机制,但其并非保护共享数据的唯一方式。有很多方式可以在特定情况下,对共享数据提供合适的保护。一个特别极端的情况就是,共享数据在并发访问和初始化时(都需要保护),需要进行隐式同步。这可能是因为数据作为只读方式创建,所以没有同步问题,或者因为必要的保护作为对数据操作的一部分。任何情况下,数据初始化后锁住一个互斥量,纯粹是为了保护其初始化过程,并且会给性能带来不必要的影响。出于以上的原因,C++标准提供了一种纯粹保护共享数据初始化过程的机制。原创 2022-10-15 18:23:21 · 656 阅读 · 0 评论 -
C++线程之使用互斥量
保护共享数据结构的最基本的方式,就是使用C++标准库提供的互斥量。访问共享数据前,将数据锁住,在访问结束后,再将数据解锁。线程库需要保证,当线程使用互斥量锁住共享数据时,其他的线程都必须等到之前那个线程对数据进行解锁后,才能进行访问数据。互斥量是C++保护数据最通用的机制,但也需要编排代码来保护数据的正确性,并避免接口间的条件竞争也非常重要。不过,互斥量也会造成死锁,或对数据保护的太多(或太少)。原创 2022-10-13 09:29:47 · 480 阅读 · 0 评论 -
线程的基本操作(五)
第一种,可以通过调用std::thread对象的成员函数get_id()来直接获取,如果std::thread对象没有与任何执行线程相关联,get_id()将返回std::thread::type默认构造值,这个值表示“无线程”。按默认排序比较不同的std::thread::id,当a原创 2022-09-30 00:45:33 · 375 阅读 · 0 评论 -
线程的基本操作(四)
因为上下文频繁切换会降低线程的性能,所以计算量的最大值和硬件支持线程数,较小的值为启动线程的数量③,std::thread::hardware_concurrency()返回0时,可以选择一个合适的数字,在本例中,选择了2.结束这个例子之前,需要明确:T类型的加法不满足结合律(比如,对于float型或double型,在进行加法操作时,系统很可能会做截断操作),因为对范围中元素的分组,会导致parallel_accumulate得到的结果可能与。启动所有线程后,⑨中的线程会处理最终块的结果。原创 2022-09-30 00:00:57 · 311 阅读 · 0 评论 -
线程的基本操作(三)
需要在线程对象析构前,显式的等待线程完成,或者分离它,进行赋值时也需要满足这些条件(说明:不能通过赋新值给std::thread对象的方式来"丢弃"一个线程)不过,t1已经有了一个关联的线程执行some_other_function的线程,所以这里系统直接调用。假设通过新线程返回的所有权去调用一个需要后台启动线程的函数,并需要在函数中转移线程的所有权。移动操作⑤完成后,t1与执行some_other_function的线程相关联,t2与任何线程都无关联,t3与执行some_function的线程相关联。原创 2022-09-21 01:25:42 · 148 阅读 · 0 评论 -
线程的基本操作(二)
移动”是指原始对象中的数据所有权转移给另一对象,从而这些数据就不再在原始对象中保存,std::unique_ptr就是这样一种类型,这种类型为动态分配的对象提供内存自动管理机制。同一时间内,只允许一个std::unique_ptr实例指向一个对象,并且当这个实例销毁时,指向的对象也将被删除。向可调用对象或函数传递参数很简单,只需要将这些参数作为std::thread构造函数的附加参数即可,需要注意的是,这些参数会拷贝至新线程的内存空间中(同临时变量一样),即使函数中的参数是引用的形式,拷贝操作也会执行。原创 2022-09-18 20:28:26 · 443 阅读 · 0 评论 -
线程的基本操作
线程启动之后要等待线程结束,还是让其自主运行,当std::thread对象销毁之前还没有做出决定,程序就会终止(std::thread的析构函数会调用std::terminate()),因此,即便是有异常存在,也需要确保线程能够正确汇入(joined)或分离(detached)。如果线程分离,就不可能有std::thread对象能引用它,分离线程的确在后台运行,所以分离的线程不能汇入,不过C++运行库保证,当线程退出时,相关资源能够正确回收。如果不等待线程汇入,就必须保证程序结束之前,访问数据的有效性。原创 2022-09-17 23:48:09 · 4481 阅读 · 0 评论