码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • GO语言-什么是临界资源安全问题?


    临界资源安全问题

    临界资源:指并发编程中,可以被多个进程/线程/协程共同访问的资源。

    如果在并发编程中对临界资源的处理不当,往往会导致数据不一致的问题。

    火车站卖票问题demo,来演示临界资源安全问题

    实现3个售票口同时售票

    1. //车票余量
    2. var tickets = 5
    3. //定义同步等待组
    4. var wg sync.WaitGroup
    5. func main() {
    6. wg.Add(3)
    7. go saleTickets("1号售票口")
    8. go saleTickets("2号售票口")
    9. go saleTickets("3号售票口")
    10. wg.Wait()
    11. }
    12. func saleTickets(name string) {
    13. for {
    14. if tickets > 0 {
    15. fmt.Printf("车票剩余:%v, %v售出\n", tickets, name)
    16. tickets--
    17. } else {
    18. fmt.Println("车票已售罄...")
    19. wg.Done()
    20. break
    21. }
    22. }
    23. }

    我们的参数一共设置了5张车票,但是程序最后反馈售出了7张车票。这就是临界资源的安全问题。

    3个goroutine在某个时刻判断车票数量是否大于0的时候,这个时刻车票数量都是满足的。但是在执行接下来的售票操作时,其中一个goroutine的售票口先把票卖出去了,但是其他两个售票口已经通过了逻辑判断,也将票卖了出去。

    如何解决临界资源安全问题?

    1.大多数语言解决同步资源安全问题都是通过上锁的方式。某一时刻只能允许一个goroutine来访问这个共享数据。go语言中,可以借助sync包下的锁操作。

    2.在go语言的并发编程中有一句经典的话:不要以共享内存的方式去通信,而要以通信的方式去共享内存。Go语言鼓励使用channel将共享状态或共享状态的变化在各个goroutine之间传递,这样就可以像锁一样保证同一时刻只有一个goroutine访问共享状态。

     

  • 相关阅读:
    Gitea:开源世界的协作灵魂
    解决OpenCV捕捉USB摄像头时抓帧失败的问题
    数据集笔记:纽约花旗共享单车od数据
    VMware改变虚拟机文件在真实机的位置2208262201
    【Go语言入门学习笔记】Part6.包和两个几乎用不到的小Tip
    【IEEE2014】EET:基于采样的机器人运动规划中的平衡勘探与开发
    第十四届蓝桥杯省赛C++B组D题【飞机降落】题解(AC)
    Bean的生命周期
    Python将图片转换为ASCII字符画
    Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的?
  • 原文地址:https://blog.csdn.net/qq522044637/article/details/125446306
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号