随笔分类 - 线程专题
摘要:适用场景: 5ms一张图,分析图中是否有三角形、圆形、正方形。如果有,给出目标的最小外接矩形位置,展示出带框的图像。 场景分析: 5ms内完成3个任务(三角形算法函数、圆形算法函数、正方形算法函数),如果未完成或只完成一部分则此帧丢弃。如果全部完成,返回各任务的最小外接矩形位置。展示带框图像。 st
阅读全文
摘要:任务流: 推荐一,Taskflow。官方地址:https://github.com/taskflow/taskflow。需要C++17支持,即编译器要求:GCC >= 8.0、Clang >= 7.0、MSVC >= 19.27 (Visual Studio 2019) 推荐二,CGraph。官方地
阅读全文
摘要:线程池学这一个就可以了,其他的不再研究。 RocksDB 是一个高性能的键值存储引擎,由 Facebook 开发并开源。其中的线程池部分,非常给力。在此收藏备注下。 线程池/任务队列调研 · 王很水的笔记 (wanghenshui.github.io) Rocksdb 的优秀代码(三)-- 工业级
阅读全文
摘要:线程传参,值传递和单独的&传递,线程都会保留一份副本,不会对函数外的值造成影响。外边的值释放了,也不影响线程函数里的值。有种普通函数值传递的感觉,里外互不相干。 指针传递,& + std::ref 组合,才是传真身,不会有副本。等效普通函数的指针传递和引用传递了。此时需要注意生命周期内的内存值的改变
阅读全文
摘要:join的目的是线程如何结束(子线程结束,主线程再结束),如果在join之前发生了异常,函数将终止,join不会被调用。为了避免这种情况发生,建议写在析构函数中。
阅读全文
摘要:容易理解的,简单一点的线程池系列博客 C++多线程编程(九)——总结篇 - 掘金 (juejin.cn) 以下内容是不容易理解的,使用了很多c++11新特性的线程池 1、避免频繁创建、销毁线程,实现复用。思路如下: 2、线程函数多种多样,如何封装成统一的函数类型 void( ) 第一次封装我们使用b
阅读全文
摘要:CPU 的运行原理 控制单元在时序脉冲的作用下,将指令计数器里所指向的指令地址(这个地址是在内存里的)送到地址总线上去,然后 CPU 将这个地址里的指令读到指令寄存器进行译码。对于执行指令过程中所需要用到的数据,会将数据地址也送到地址总线,然后 CPU 把数据读到 CPU 的内部存储单元(就是内部寄
阅读全文
摘要:/************************************* * 异步情况的日志打印 * 以记录“加”、“减”的开始、结束时间戳为例,只展示思路,不用纠结方法内容。 **************************************/ #include <iostream>
阅读全文
摘要:queue队列,先进先出。 多线程的一种使用案例: 生产者每3s push一个元素,消费者每5s才能 pop一个元素(队首),那么2个消费者就可以及时地消耗掉push的元素。 #include<iostream> #include<thread> #include<mutex> #include<c
阅读全文
摘要:当多个线程操作同一全局变量时,需要对该变量进行保护。推荐使用原子变量,当然也可以使用加锁。 原子变量,参考官方cplusplus.com/reference/atomic/atomic/,翻译C++原子变量atomic详解 - 知乎 (zhihu.com) 锁,推荐使用 std::lock_guar
阅读全文
摘要:最新版本已经改名为oneTBB 为配合VS2015,懒得编译dll,直接下载现成的 Release Threading Building Blocks 2020 Update 3 · oneapi-src/oneTBB · GitHub (fgit.cf) 解压后tbb文件夹放到C盘根目录,其中的u
阅读全文
摘要:Qt 提供了 QtConcurrent 模块,处理一些常见的并行计算,最大的特点就是无需再使用互斥锁这种很低级的操作,全都封装好了。除此以外,QFuture、QFutureWatcher、QFutureSynchronizer 类提供了一些辅助性的操作。参考:Qt 中的多线程技术 - 知乎 (zhi
阅读全文
摘要:【同步、异步】 同步意味着事件、操作或进程是有序的,一个操作必须在另一个操作完成后开始执行。当多线程时通过锁、信号量等机制来确保数据一致性或避免竞争条件。 异步则意味着事件、操作或进程是独立的,可以在不等待其他操作完成的情况下开始执行。一定是多线程。 参考:理清概念:同步与异步_同步异步-CSDN博
阅读全文
摘要:逐步更新中~~~,参考书籍《C++并发编程实战(第2版)》,不照搬书,只写理解感悟。 引入头文件 #include <thread> 线程启动 std::thread t(my_func); 若需等待线程执行完毕,才继续之后的代码,用join if (t.joinable()) { t.join()
阅读全文
摘要:类的多个对象共享的有:成员函数、被static修饰的成员变量 多个对象使用同一个成员函数,会串行。 多线程使用同一个成员函数,会并行。 代码与数据是两种东西,代码负责取出数据。函数本身是代码,代码在内存中唯一。其形参、局部变量在各自的线程栈中,内存独立。 函数中的全局变量、动态申请的空间、静态局部变
阅读全文
摘要:线程函数的参数中是没有this指针参数的。类内的函数默认会在参数末尾添加this指针,不满足线程函数的要求。 全局函数(类外的函数)、static修饰的静态函数都可以消除默认添加的this指针。 所以,线程函数放类内需加static修饰,或者直接放类外。 注意:静态成员函数在类外实现时候无须加sta
阅读全文
摘要:不同平台、框架、语言所使用的线程函数不同。对于初学者选择一种适合自己的,用熟用透即可。 Windows中,CreateThread() Linux中,pthread_create() MFC框架中,AfxBeginThread() Qt框架中,QThread类 C++11中,thread类 本文只介
阅读全文