• 三、lock类的编写与解析 —— TinyWebServer


    lock类的编写与解析 —— TinyWebServer

    一、前言

    这个类的作用作者已经给了解释 —— “多线程同步,确保任一时刻只能有一个线程能进入关键代码段.”
    对于这句话其实看了,会有似懂非懂的感觉,然后写代码的时候,就会完全不懂。其实主要大家不懂的原因,可能是没有理解以下几个问题

    二、上述问题回答

    Ⅰ、为什么要把它封装成一个类?难道就只是让他看起来更有层次感?

    Ⅱ、社长的“庖丁解牛”中的RAII到底是什么?体现在代码中的作用是什么?最新版Web服务器项目详解 - 01 线程同步机制封装类

    这两个问题的答案其实就是同一个,给放到一起了。首先封装成类的主要原因就是为了实现RAII
    RAII到底是什么呢?为什么要实现它?
    下面是社长的解释。
    在这里插入图片描述
    我画一下重点
    在这里插入图片描述
    其实理解析构函数,和生命周期,这句话就很好理解了。
    简单来说作用就是,创建对象,在作用域(生命周期)结束时,自动调用析构函数释放资源。
    所以就是为什么封装成类。
    类 有构造函数和析构函数 ,利用构造函数和析构函数的机制实现RAII。

    Ⅲ、对于代码中封装的信号量、互斥量、锁,在哪里使用他们,意义是什么?

    来看看社长怎么说
    在这里插入图片描述
    简单来说这个项目后面会写线程池、数据库连接池。需要用信号量、互斥量、锁来保证 “同步,保证操作的原子性”
    还是不懂的话,就等我后续文章吧!

    三、代码实现

    一、信号量

    信号量是一种特殊的变量,它只能取自然数值并且只支持两种操作:等待§和信号(V).假设有信号量SV,对其的P、V操作如下:

    • P操作:如果SV的值大于0,则将其减一;若SV的值为0,则挂起执行
    • V操作:如果有其他进行因为等待SV而挂起,则唤醒;若没有,则将SV值加一

    二、条件变量

    条件变量提供了一种线程间的通知机制,当某个共享数据达到某个值时,唤醒等待这个共享数据的线程.

    三、互斥量

    互斥锁,也成互斥量,可以保护关键代码段,以确保独占式访问.当进入关键代码段,获得互斥锁将其加锁;离开关键代码段,唤醒等待该互斥锁的线程.

    实现部分
    上述共同点

    • 构造函数
    • 析构函数
    • 类似 P操作
    • 类似V操作

    不同点

    • 互斥量,需要获取mutex_t
    • 条件变量,设置超时时间

    四、下期预告

    日志文件的编写与解析。
    原因:本来写完lock类(线程同步机制包装类)应该就是写线程池的。但是由于在线程池类中要用到数据库连接池,数据库连接池又要用到日志。所以下期先写日志。

    五、最后

    求赞!

  • 相关阅读:
    ai语音机器人OKCC的空号检测
    若依ruoyi-vue前端页签缓存设置
    做拼多多呀,真的没有那么复杂
    【JavaWeb的从0到1构建知识体系(七)】JUnit和JUL日志系统
    解决问题:已通过系统pip安装了相应模块,但是PyCharm中却提示 No module named xxxx
    java计算机毕业设计ssm+vue 大好前途高校毕业生求职招聘网站
    MATLAB continue语句
    websocket使用案例(前后端springboot+vue)
    银行拓客难题如何破解?10套技术驱动的拓客模板,助你批量挖掘政策性客群!
    SQL Server 数据库创建与删除
  • 原文地址:https://blog.csdn.net/Ten_years_star/article/details/132799270