自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 学习记录(5)---用C++封装一个简易的线程池

通过使用互斥锁来保护任务队列,我们确保多个线程不会同时修改任务队列,从而避免了竞争条件和其他并发问题的发生。因此,我们需要使用互斥锁来保护共享资源,以确保在多个线程同时访问时,不会发生数据竞争和其他并发问题。然后,我们使用条件变量来唤醒所有线程,告知它们条件已经改变,需要重新检查是否需要停止执行任务。最后,我们遍历线程池中的所有线程,并对每个线程执行。最后,让我们来实现线程池的析构函数。通过这种方式,我们可以确保在线程池对象被析构时,所有的线程都会被正确地停止和销毁,从而保证了线程池的正常关闭。

2024-05-10 14:01:04 707

原创 学习记录(4.5)---面向对象生产者类和消费者类的封装

对于一些改进的思想, 比如RAII,禁止复制等可以自行扩展,到此我们的生产者和消费者模型的封装已经完成,如有不足,欢迎指正!,重写其中的run函数 ,生产者需要从任务队列中生产任务执行push函数,消费者需要从任务队列中消费任务执行pop函数。还是给出整体类图,对于生产者和消费者继承了我之前封装的。

2024-05-05 21:04:35 312 1

原创 学习记录(4.4)---面向对象TaskQueue任务队列类的封装

我们已经介绍了MutexLock(互斥锁)类和Condition(条件变量)类的封装,现在我们组合在一起封装存取任务的仓库TaskQueue。

2024-05-04 15:14:25 246

原创 学习记录(4.3)---面向对象的条件变量类的封装

上一篇文章我们介绍了MutexLock(互斥锁)类的封装,,接下来是条件变量类的封装直接开始!!!!

2024-05-03 21:19:16 11 1

原创 学习记录(4.2)---面向对象的互斥锁类的封装

上一博客介绍了整个生产者消费者问题的类图,接下来我会对各个模块的封装给出代码。今天是面向对象的互斥锁类的封装相关函数已经给出介绍,直接开始!!!

2024-05-02 21:08:05 359 2

原创 学习记录(4.1)-----面向对象生产者消费者封装

当然,因为生产者与消费者需要从共享的仓库中存数据或者取数据,设计到对仓库的互斥访问,所以需要加锁,当然在这里我们把仓库用一个任务队列TaskQueue进行封装,提供互斥锁、条件变 量的基本数据成员,当然任务队列里面也就是基本操作,队列是不是满的,是不是空的,存数据与取数 据等基本操作。例如,在生产者-消费者问题中,生产者线程负责生产数据,消费者线程负责消费数据,条件变量可以用来确保消费者线程在生产者线程生产数据后才进行消费,以避免竞争条件问题和不必要的资源消耗。发送信号通知一个等待在条件变量上的线程。

2024-05-02 17:36:09 1063 1

原创 学习记录(3)--生产者消费者模型

生产者消费者问题是计算机科学中经典的同步问题之一,涉及多个并发执行的线程或进程之间的协调与合作。该问题通常描述为一个有限的缓冲区(或队列),生产者将产品放入缓冲区,而消费者则从中取出产品。通过这两个信号量的协作,可以确保生产者和消费者之间的正确同步,避免了生产者向满的缓冲区中添加产品,以及消费者从空的缓冲区中取出产品的情况。为了解决这个问题,需要使用适当的同步机制,如信号量、互斥锁或条件变量等。在实现生产者消费者问题时,需要注意避免常见的问题,如死锁和竞态条件,确保线程或进程之间的安全交互。

2024-04-30 17:39:58 172

原创 学习记录(2)--基于对象的线程封装

类和类之间的关系除了继承,还有一些其他的关系,所以可以使用组合与依赖的方式,也就是基于对象的方法(不用使用继承)。因为没有继承,所以需要把Thread类中的抽象方法run()函数通过function与bind的方式进行修改即可。之前的run方法是一个返回类型是void参数为空的函数,现在直接使用bind改变函数的形态,将Thread变为一个非抽象类。3.任务的传递,将任务用bind改变函数形态,交给参数cb(右值引用),再在构造函数中将其初始化。继承、 关联、聚合、组合、依赖。

2024-04-30 15:49:34 285

原创 学习记录(1)--面向对象的线程封装

以上是线程相关的函数,对应参数及相关文档可以man一下,毕竟“有问题找男人”!!!!!

2024-04-29 17:48:50 420

转载 WebServer----(1)用C++实现一个简易的线程池

相信大家都知道,线程的创建和销毁都是需要时间的,在上述的场景中必然会频繁的创建和销毁线程,这样的开销相信是不能接受的,此时线程池技术便是很好的选择。陈硕大神推荐的C++多线程服务端编程模式为:one loop per thread + thread pool,通常会有单独的线程负责接受来自客户端的请求,对请求稍作解析后将数据处理的任务提交到专门的计算线程池。任务队列负责存放主线程需要处理的任务,工作线程队列其实是一个死循环,负责从任务队列中取出和运行任务,可以看成是一个生产者和多个消费者的模型。

2024-04-29 15:21:20 22

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除