码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【南京大学jyy操作系统(蒋炎岩)】(四)并发控制: 同步 | 真实世界的并发编程


    文章目录

    • 同步
      • 什么是同步??
      • 生产者-消费者模式
      • 条件变量
        • 分析
      • 条件变量
        • API
        • 条件变量:实现生产者-消费者
      • 信号量
        • 复习:互斥锁和更衣室管理
      • 哲学家吃饭问题
      • 总结
    • 真实世界的并发编程
      • 高性能计算中的并发编程
      • 数据中心里的并发编程
        • go
      • 我们身边的并发编程
    • 并发 Bug 和应对
      • 总结

    前言

    学习链接 : 链接点击跳转
    在这里插入图片描述

    同步

    • ppt
      在这里插入图片描述

    什么是同步??

    • 例子
      在这里插入图片描述
      在这里插入图片描述

    生产者-消费者模式

    在这里插入图片描述
    在这里插入图片描述

    • 测试代码的正确性
      在这里插入图片描述

    条件变量

    分析

    在这里插入图片描述

    • 把 pc.c 中的自旋变成睡眠
    • 测试不通过
      在这里插入图片描述
      • 尝试在完成操作时唤醒
        在这里插入图片描述

    条件变量

    API

    在这里插入图片描述

    条件变量:实现生产者-消费者


    在这里插入图片描述
    在这里插入图片描述

    • 解决方案 ; 设置俩个不同类型的 条件变量
    • 多一点线程
      在这里插入图片描述

    在这里插入图片描述

    • 10
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    信号量

    复习:互斥锁和更衣室管理

    操作系统 = 更衣室管理员
    先到的人 (线程)
    成功获得手环,进入游泳馆
    *lk = 🔒,系统调用直接返回
    后到的人 (线程)
    不能进入游泳馆,排队等待
    线程放入等待队列,执行线程切换 (yield)
    洗完澡出来的人 (线程)
    交还手环给管理员;管理员把手环再交给排队的人
    如果等待队列不空,从等待队列中取出一个线程允许执行
    如果等待队列为空,*lk = ✅
    管理员 (OS) 使用自旋锁确保自己处理手环的过程是原子的

    • 更衣室管理
      完全没有必要限制手环的数量——让更多同学可以进入更衣室
      管理员可以持有任意数量的手环 (更衣室容量上限)
      先进入更衣室的同学先得到
      手环用完后才需要等同学出来

    • “手环” = “令牌” = “一个资源” = “信号量” (semaphore)

    • pc-sem.c
      在这里插入图片描述

    在这里插入图片描述

    哲学家吃饭问题

    在这里插入图片描述

    在这里插入图片描述

    初始的时候 每个哲学家只有一把叉子
    在这里插入图片描述
    在这里插入图片描述
    因为每人都只拿左手的叉子 , 导致

    在这里插入图片描述

    总结

    在这里插入图片描述

    真实世界的并发编程

    在这里插入图片描述

    高性能计算中的并发编程

    在这里插入图片描述

    • 超级计算(目前) : 把同多个步操作 分给多个cpu 然后汇总起来 (eg 。 拓扑结构 计算二维dp)
    • 超级计算机 : 分哪些机器 , 再想机器上有哪些进程 最后线程是如何通信的
    • MPI接口 同步的库: 多节点程序 如何保证多节点发消息通信同步
      在这里插入图片描述

    数据中心里的并发编程

    • 特点
      在这里插入图片描述

    在这里插入图片描述

    • 在俩个数据中间是有延迟的 ,CAP是不可能同时三个都做到的
      在这里插入图片描述
      在这里插入图片描述
    • such 1 second 完成 1w的请求??
    • . QPS:全名 Queries Per Second,意思是“每秒查询率”
    • tail latency 尾延迟
      在这里插入图片描述
    • 实现切换 存在代价
      在这里插入图片描述

    在这里插入图片描述

    go

    在这里插入图片描述

    • go的 canal 相对于队列 (也可以实现容量)
    • go : 不用和c 一样去约束 ,实现 xx并发协议 (贴纸 。。) , 直接做就就可以 (PC 模式) 解决高并发 IO的问题

    我们身边的并发编程

    并发 Bug 和应对

    总结

  • 相关阅读:
    Windows下CMD操作常用指令详解
    集合Collection
    Springboot毕业设计毕设作品,心理评测系统设计与实现
    月薪2w的前端工程师,必盘的实战项目
    Complete Probability Spaces
    Python3安装
    快速了解Apipost
    Spring工具类--ReflectUtils的使用
    【Python脚本进阶】2.4、conficker蠕虫(上):Metasploit攻击Windows SMB服务
    夜天之书 #68 开源码力圆桌文字稿
  • 原文地址:https://blog.csdn.net/weixin_49486457/article/details/127751782
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号