多线程编程
文章平均质量分 58
iπ弟弟
野生程序喵,阿里云弹性计算后端开发工程师。
Github: https://github.com/ZYunfeii
展开
-
C++11异步任务轮子实现(header-only)
【代码】C++11异步任务轮子实现(header-only)原创 2023-09-21 17:23:27 · 448 阅读 · 0 评论 -
Tecent libco C++协程库初探
libco生产者消费者模型demo实现和一点对协程的思考。原创 2023-03-04 12:00:25 · 1497 阅读 · 2 评论 -
一个简单而优雅的C++线程池
一个简单而优雅的基于C++高性能线程池原创 2022-11-09 15:58:43 · 697 阅读 · 1 评论 -
深度强化学习off-policy类算法多进程加速训练实现(以TD3为例)
思路与on-policy类算法的多进程加速不同,off-policy算法的子进程虽然也是用来探索环境,但是它收集到的数据可以随时添加进主进程的buffer中。另外,off-policy算法子进程探索环境的策略也不必与主进程等待训练的策略保持完全一致(off-policy名称由来)。听起来off-policy的多进程实现要更容易一些,但是实际做起来却更困难。实现框架:一个主进程+n个子进程+1个主进程的子线程功能:主进程:训练网络,评价网络;n个子进程:探索环境,收集数据传回主进程放入主进程的bu原创 2021-05-17 19:46:15 · 1533 阅读 · 1 评论 -
DPPO深度强化学习算法实现思路(分布式多进程加速)
为什么是多进程众所周知,python的多线程是伪多线程,在全局????GIL下某一时刻python只有一个线程在执行,这就意味着在计算密集型任务下多线程反而会更慢(上下文切换)。因此,想做关于强化学习加速的任务只能多进程(可以理解为手动运行多个程序)。但是多进程又很麻烦,麻烦在进程之间的数据联系(因为进程是不共享全局区的),本文采用pipe技术(管道)做数据传输。实现思路1多个子进程同步训练网络在主进程将子进程网络的权重取平均更新到net再将net传入子进程,回到1这种思路是最容易想到的,实原创 2021-05-13 20:45:42 · 6234 阅读 · 23 评论 -
<C++多线程5>unique_lock的使用
unique_lock详解unique_lock取代lock_guardunique_lock是个类模板,一般lock_guard(推荐使用)unique_lock更灵活,但效率低些在只填一个参数情况下,unique_lock可以完全取代lock_guardstd::lock_guard<std::mutex> sbguard1(my_mutex1);//替换为:std::unique_lock<std::mutex> sbguard1(my_mutex1);uni原创 2021-04-23 11:40:29 · 327 阅读 · 0 评论 -
<C++多线程4>互斥量、死锁问题
互斥量、死锁接上一节的代码。互斥量互斥量是个类对象。理解成一把锁,多个线程尝试用 lock() 成员函数来加锁,只有一个可以锁定成功,返回true,如果没有锁成功,那么流程卡在 lock() 这里不断地尝试去锁这把锁头。互斥量保护要不多也不少,多了浪费时间,少了保护不到位。互斥量创建使用互斥量要包含头文件:#include <mutex>之后再私有变量中加入 std::mutex my_mutex;class A{public: // 把收到的命令放到一个队列的线程原创 2021-04-21 17:33:05 · 196 阅读 · 0 评论 -
<C++多线程3>创建多个线程、数据共享
创建多个线程、数据共享创建多个线程// 线程入口函数void myprint(int inum){ cout<<"myprint线程开始执行了,线程编号:"<<inum<<endl; // 干各种事情 cout<<"线程结束执行了"<<endl; return;}int main(){ // 创建和等待多个线程 vector<thread> mythreads; //原创 2021-04-21 17:30:49 · 307 阅读 · 0 评论 -
<C++多线程2>向线程传递参数,detach的易错点
线程传参详解、detach()大坑、成员函数做线程函数传递临时对象作为线程参数一个将主线程参数传入子线程的demo:#include<iostream>#include<thread>using namespace std;void myprint(const int &i,char *pmybuf){ cout << i << endl; cout << pmybuf << endl; return;}原创 2021-04-21 17:28:59 · 368 阅读 · 0 评论 -
<C++多线程1>线程启动、结束、创建线程的方法、join、detach
thread和jointhread是一个类,使用的时候需要包含头文件 #include<thread>。一个进程产生的同时会产生一个主进程,也就是main函数,我们可以定义子进程,这样在一个进程中就有多条“线路”可走,但是会存在一个问题,主线程走完了子线程还没有走完,此时操作系统将强制停止子线程,程序出错,因此需要 join用来阻塞主线程。下面给出一个demo:#include<iostream>#include<thread>using namespace s原创 2021-04-21 17:26:19 · 754 阅读 · 0 评论