【牛客网C++服务器项目学习】Day8.5-自己的一点心得体会

项目学习地址:【牛客网C++服务器项目学习】

day09

  • 线程部分,自己用库函数,实现了一个信号量控制线程同步对临界区数据的读取和写入

    • 信号量,顾名思义,表示信号的一个变量。学完了线程,我们知道线程之间是共享内存资源,这就会带来冲突的问题,由此引出了临界区和锁的概念
    • 信号量与之前的互斥锁、读写锁有一个很大的不同:锁是一个开关,它只能表示对当前保护的对象,开权限或者关权限,它不能表示当前受保护的对象,资源的数量。信号量就是实现对受保护对象资源数量的表示的功能
      • 信号量函数中的sem_wait()函数是-操作,消耗对象的一个资源;sem_post()函数是+操作,增加对象的一个资源。在生产者和消费者模型中,使用信号量的这两个函数,不仅可以表示缓冲区中是否存在可以消耗的资源,还可以表示当前缓冲区还存在多少个可以消耗的资源。
      • sem_wait()函数可以实现上锁的功能。定义一个表示“互斥”的信号量mutex,进入一个线程后,调用wait函数,mutex信号量对应的资源为0,其他线程如果调用wait函数后,会阻塞该线程,将其放到等待队列上去。这便实现了给临界区上锁的功能;
      • 信号量机制,还可以实现条件唤醒的功能。在之前学条件变量的时候,我们知道,正确地讲条件变量和互斥锁相结合,可以阻塞无权限的线程,在可以获取权限的时候,将其唤醒。阻塞在CPU的调度等待队列,可以减少CPU的资源浪费,这是一种好的设计模式。信号量机制的实现是这样的,当传递给sem_wait()的信号量,资源为0,这时便会阻塞调用该函数的线程(进程),将其放在等待队列中,如果其他线程通过sem_post()函数增加了该信号量的资源,那么才会唤醒该线程。
      • 之前在李治军老师那边学信号量的时候,只注意到了对临界区上锁的需求,没有意识到类似于自旋锁(忙等待、占据CPU资源)和互斥锁、读写锁(阻塞到队列,需要唤醒)这两种对等待的区别,也就没能搞懂信号量实现生产者和消费者的代码。现在在这个项目这又学了一遍,算是搞明白了。
  • 进入计算机网络部分。

    • 回忆了网络设计的模式、MAC地址(数据链路层)、IP地址(IP地址的分类、子网掩码)。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值