Android进程线程之同步互斥(一)

本文深入探讨了Android系统中的同步互斥机制,包括Mutex、Condition和Barrier的使用。Mutex提供了锁机制,分为PRIVATE和SHARED类型。Condition解决了条件等待的问题,避免了无效的CPU轮询。Barrier是基于Mutex和Condition的应用,用于控制多线程间的同步,例如在SurfaceFlinger中的应用。Autolock简化了Mutex的加解锁操作,确保资源的正确管理。
摘要由CSDN通过智能技术生成

1.1.1 Android中的同步与互斥

Android系统也提供了自己的同步互斥机制,不过任何技术的本质都是类似的,更多的是把这些本质的东西应用到符合自己要求的场景。目前Android封装的同步互斥类包括:

·          Mutex

头文件在frameworks/native/include/utils/Mutex.h,因为实现与具体的平台有关,我们只关心如何使用它

·          Condition

头文件在frameworks/native/include/utils/Condition.h,同样我们只是应用它

·          Barrier

frameworks/native/services/surfaceflinger/Barrier.h

这是基于Mutex和Condition实现的一个模型,目前只被用于SurfaceFlinger中,我们在后续的章节会碰到

1.1.1.1 Mutex

Mutex类中有一个enum定义,如下:

class Mutex {

public:

    enum {

        PRIVATE = 0,

        SHARED = 1

    };

如果是SHARED的话,说明它是适用于跨进程共享的。比如AudioTrack与AudioFlinger就驻留在两个不同的进程,所以它们的mutex就是这种类型的:

/*frameworks/av/media/libmedia/AudioTrack.cpp*/

audio_track_cblk_t::audio_track_cblk_t()

    : lock(Mutex::SHARED), cv(Condition::SHARED), user(0),server(0),

    userBase(0),serverBase(0), buffers(NULL), frameCount(0),

    loopStart(UINT_MAX),loopEnd(UINT_MAX), loopCount(0), mVolumeLR(0x10001000),

    mSendLevel(0), flags(0)

{

}

Mutex类中有三个重要的成员函数:

    status_t    lock(); //获取资源锁

    void       unlock();//释放资源锁

status_t    tryLock(); /*如果当前资源可用就lock,否则也直接返回,返回值0代表成功。可见它和lock()

                的区别在于不论成功与否都会及时返回,而不是等待*/

它的构造函数有三个:

/*frameworks/native/include/utils/Mutex.h*/

inline Mutex::Mutex() {

   pthread_mutex_init(&mMutex, NULL);

}

inline Mutex::Mutex(const char* name)

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值