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

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

  •  
  •   ruandao · 20 天前 · 392 次点击

    谢谢

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

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