- 博客(7)
- 收藏
- 关注
原创 c++11实现同步、异步线程池
关于worker函数和manager函数的实现,代码注释已经解释的很清楚了,我就不多说了,最后测试的时候发现,管理者线程销毁线程的时候,结果并非预期。F是一个可调用对象,Args是可变参数,addTask的参数是万能引用,返回值是->指向的东西,也就是一个future对象,future内部类型是我们用result_of推导出来的结果,也就是任务函数的结果的类型,把它简化命名为returnType,然后用包装器把一个返回值为returnType,参数为Args的函数也就是任务函数包装成pkg,
2024-08-14 17:05:02 664
原创 c++ lambda表达式的注意事项
但是加上const之后,发现报错了,明明捕获的是a的副本,但是为什么还会报错呢?执行lambda表达式,发现报错,原因是:默认情况下,lambda 表达式是。这意味着你不能在 lambda 内部修改捕获的变量。当加上mutable关键字,就可以改变捕获的变量。修饰符的影响是对整个变量的,当你捕获一个。变量时,即使是副本,这个副本也具有。
2024-08-14 15:55:21 192
原创 c++并发编程(异步)
我们定义两个函数,分别为mythread,和mythread2:先看mythread就行,第一个参数是primise用来储存返回值,第二个参数是整型值再看主函数,启动了mythread,注意第二个参数promise对象不允许复制,必须是指针或者引用(),而且我们也希望把结果储存到这个对象本身而不是复制的副本中。然后我们通过get_future获得返回值,要注意的future对象也不能被复制,而且也不能用引用传值(future),一般通过move(移动语义)来传递。
2024-08-14 04:07:34 635
原创 c++多线程编程中的虚假唤醒
以编写线程池为例,首先定义了任务队列(m_tasks),存放任务(function包装的函数指针),有多个worker线程执行worker函数,需要从任务队列取出任务,这时候就需要加锁判断任务队列是否有任务,假设任务队列添加一个任务我们使用notify_all唤醒阻塞的子线程时,这时候所有子线程都解除阻塞,如果一个子线程取走了任务,这时候任务队列如果没有任务的情况下,其他的子线程依然尝试从任务队列取任务,就是虚假唤醒(任务队列无任务,子线程仍然被唤醒去取任务)。
2024-08-12 18:57:30 150
原创 在Clion上配置Linux开发环境
5.最后一步,右键项目,然后点击部署,然后点击上传到刚才的远程主机,就可以把本地代码同步到远程Linux系统。因为用的环境都是远程Linux的,所以要确保连接的Linux有这些必要的工具:cmake等,没有的话下载一下就行。3.第三步,配置cmake,因为默认的是本地debug,我们需要远程调试,所以需要添加个新的,这里我其名为remote_debug。然后把工具链选择刚刚配置的远程主机。4.第四步,点击部署,这里的根路径就是浏览远程Linux的根目录,配置完成后可以点击测试连接。
2024-07-25 18:12:44 247
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人