美文网首页
同步机制

同步机制

作者: 修塔寻千里 | 来源:发表于2020-01-29 14:59 被阅读0次

经典实现

信号量

信号量与PV原语操作由Dijkstra发明,也是使用最广泛的互斥方法之一。它包含以下几个元素:

  • Semaphore S(信号量)
  • Operation P,有时也表达为wait()
  • Operation V, 有时也表达为signal()
    Semaphore S用于指示共享资源的可用数量,P原语可以减小S计数,V则增加它的计数。由此可知当某个进程想进入共享区,首先要执行P操作;同理,想退出共享区时执行V操作。


    PV操作图

Mutex

Mutual Exclusion,其释义为互斥体。Mutex通常是对某一排他资源的共享控制——要么这个资源被占用(Lock),要么就是可以访问(unlock)。

管程(Monitor)

管程是可以被多个线程/进程安全访问的对象(Object)或者模块(module)。管程中的方法都是受mutual exclusion保护的,意味着着同一时刻只允许一个访问者使用它们。另外管程还具备如下属性:

  • 安全性
  • 互斥性
  • 共享性

Android中的同步机制

Mutex

Android中的Mutex只是对pthread提供的API的简单再封装,另外Mutex中还包含一个AutoLock的嵌套类,它利用变量生命周期特点而设计的一个辅助类。
Mutex既可以实现进程内的永不,也可以解决进程间同步问题。与Semaphore不同,Mutex只有两种状态,即0和1。当调用者希望访问临界资源时,它必须先通过lock()来获取资源锁。如果此时资源可用,这个函数立马返回;否则,会进入阻塞等待,知道有人释放了资源锁并唤醒它。释放资源锁调用unlock(),同时正在等待使用这个锁的其他对象会被唤醒,然后继续执行它的任务。另外Mutex还特别提供了一个tryLock()来满足程序多样化需求。这个函数会试探性地查询资源锁是否可用,在不可用的情况下,并不会阻塞,而是同样立即返回,只是返回值不为0。

Condition

Condition是“条件变量”在Android系统中的实现类,它是依赖Mutex来完成的。

Barrier

Barrier是同时基于Mutex和Condition实现的一个模型。是对Condition的一个应用,Barrier类是专门为SurfaceFlinger而设计的。

加解锁的自动化操作——Autolock

在Mutex类内部的Autolock嵌套类,实现了加、解锁的自动化操作。它的实现原理为:
当Autolock构造时,会主动调用内部成员变量mLock的lock()方法来获取一个锁。而在析构时,调用它的unlock()方法释放锁。这样假如一个Autolock对象是局部变量的话,那么它在生命周期结束时就会自动把资源解锁。

参考资料

  • 深入理解Android内核设计思想. 林学森。

相关文章

  • Java同步机制之死锁

    Java并发系列番外篇——同步机制(三) 姊妹篇《Java同步机制之synchronized》姊妹篇《Java同步...

  • Linux 多线程 - 线程异步与同步机制

    Linux 多线程 - 线程异步与同步机制 I. 同步机制 线程间的同步机制主要包括三个: 互斥锁:以排他的方式,...

  • Android-Handler同步屏障

    一、消息机制之同步屏障 消息机制的同步屏障,其实就是阻碍同步消息,只让异步消息通过。而开启同步屏障的方法就是调用下...

  • C++: 多线程同步机制

    C++生产者消费者 基于锁和条件变量的同步机制 基于pipe的同步机制 基于变量的同步机制,在面对select/p...

  • 17 Go并发编程(四):sync 同步 —— Go并发的安全机

    Go 同步机制 在《Go并发编程初探》中我们提到同步概念,所谓同步是相对异步而言,即串行相对于并行。 同步机制解决...

  • js的事件循环

    javascript是一个单线程语言,javascript分为同步机制及异步机制,其中同步机制是放在栈中,而异步机...

  • java中同步锁机制?

    java中同步锁机制?

  • 7 Java并发Lock接口

    java.util.concurrent.locks.Lock接口用作线程同步机制,类似于同步块。新的锁定机制更灵...

  • 十一 .Java并发工具

    Java中的锁 锁是一种线程同步机制,类似同步块,但是锁比Java的同步块更复杂。锁(以及其他更高级的同步机制)是...

  • android 多线程——Callback

    线程同步的四种机制 线程同步有四种机制,分别是临界区(Critical Section)、互斥量(Mutex)、信...

网友评论

      本文标题:同步机制

      本文链接:https://www.haomeiwen.com/subject/syivthtx.html