V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ruandao
V2EX  ›  问与答

如果临界区域的修改操作只占一小部分, cas 可以获得更大的并发度,要怎么理解

  •  
  •   ruandao · 2019-11-17 11:44:13 +08:00 · 971 次点击
    这是一个创建于 1838 天前的主题,其中的信息可能已经有所发展或是发生改变。

    谢谢

    1.mutex 方式的临界区域是指 mutex.lockmutex.unlock 吗? 2.如果临界区域的修改操作只占一小部分,cas 可以获得更大的并发度 这句话要怎么理解?

    2 条回复    2019-11-17 12:42:20 +08:00
    hhx
        1
    hhx  
       2019-11-17 12:32:23 +08:00 via Android   ❤️ 1
    说下我的理解。mutex 即互斥信号量,它首先是个信号量,并且初始值为 1。信号量的 pv 操作可以理解成 Java 中的内置锁,即对象监视器 monitor。大家知道,获取锁失败后,进程将进入锁的阻塞队列,并进入阻塞态,等待被释放锁的进程唤醒。再看 cas,典型用法时 cas 失败时,不进入阻塞态,而是继续执行 cas,直到成功,这叫自旋。因此说 mutex 的加锁解锁,伴随着进程的阻塞与唤醒,而 cas 没有。要知道进程的阻塞与唤醒是代价较高的操作,伴随着 pcb 的检索,进程状态修改,pcb 入队出队,以及进程 cpu 上下文的切换。如果临界区的代码较少,显而易见,cas 自旋方式性能更高。
    hhx
        2
    hhx  
       2019-11-17 12:42:20 +08:00 via Android   ❤️ 1
    临界区完整的结构是,进入区,临界区,退出区和剩余取。进入区即 Lock.Lock,退出区即 Lock.unLock,剩余区即不需同步的代码段,临界区即需同步代码段。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3388 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:48 · PVG 19:48 · LAX 03:48 · JFK 06:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.