Android中线程同步之MUTEX与Condtion的实现

2024-04-01 03:58

本文主要是介绍Android中线程同步之MUTEX与Condtion的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

田海立
2013-08-10

Android封装的同步类主要有MUTEX(AutoMutex)与Condition。前文分析了它们的外部使用,本文看它们是如何通过对pthread Mutex和Condition的封装实现的。遇到pthread的用法,可结合《 pthread之MUTEX与Condition用法》一起看。
Keywords: Mutex, Condition Variable, AutoLock/AutoMutex, Android
关键字:互斥体、条件变量、自动锁/自动互斥体、Android

一、MUTEX的实现


MUTEX的实现是在frameworks/native/include/utils/Mutex.h中。

Mutex的实现利用了pthread Mutex的实现。

首先,Class Mutex内部定义一个pthread_mutex
    pthread_mutex_t mMutex;

然后,分别封装了pthread_mutex_xxx()而已:
inline Mutex::Mutex() {pthread_mutex_init(&mMutex, NULL);
}
inline Mutex::Mutex(const char* name) {pthread_mutex_init(&mMutex, NULL);
}
inline Mutex::Mutex(int type, const char* name) {if (type == SHARED) {pthread_mutexattr_t attr;pthread_mutexattr_init(&attr);pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);pthread_mutex_init(&mMutex, &attr);pthread_mutexattr_destroy(&attr);} else {pthread_mutex_init(&mMutex, NULL);}
}
inline Mutex::~Mutex() {pthread_mutex_destroy(&mMutex);
}
inline status_t Mutex::lock() {return -pthread_mutex_lock(&mMutex);
}
inline void Mutex::unlock() {pthread_mutex_unlock(&mMutex);
}
inline status_t Mutex::tryLock() {return -pthread_mutex_trylock(&mMutex);
}

具体pthread Mutex的用法,参见《pthread之MUTEX与Condition用法》

二、Autolock/AutoMutex的实现

Autolock/AutoMutex的实现同样是在frameworks/native/include/utils/Mutex.h中。

namespace android {class Mutex {//...class Autolock {public:inline Autolock(Mutex& mutex) : mLock(mutex)  { mLock.lock(); }inline Autolock(Mutex* mutex) : mLock(*mutex) { mLock.lock(); }inline ~Autolock() { mLock.unlock(); }private:Mutex& mLock;};}; // end of class Mutextypedef Mutex::Autolock AutoMutex;}; // namespace android

三、Condition的实现

Condition的实现是在frameworks/native/include/utils/Condition.h中

Condition的实现利用了pthread Condition的实现。

首先,Class Condition内定义一个pthread_cond
    pthread_cond_t mCond;

然后,分别封装了pthread_cond_xxx()而已:
inline Condition::Condition() {pthread_cond_init(&mCond, NULL);
}
inline Condition::Condition(int type) {if (type == SHARED) {pthread_condattr_t attr;pthread_condattr_init(&attr);pthread_condattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);pthread_cond_init(&mCond, &attr);pthread_condattr_destroy(&attr);} else {pthread_cond_init(&mCond, NULL);}
}
inline Condition::~Condition() {pthread_cond_destroy(&mCond);
}
inline status_t Condition::wait(Mutex& mutex) {return -pthread_cond_wait(&mCond, &mutex.mMutex);
}
inline void Condition::signal() {pthread_cond_signal(&mCond);
}
inline void Condition::broadcast() {pthread_cond_broadcast(&mCond);
}

具体pthread Condition的用法,参见《pthread之MUTEX与Condition用法》

四、总结

本文简要介绍了Android中常用的同步机制Mutex(AutoMutex)、Condition的内部实现,也就是对pthread Mutex和Condition的简单封装。《 pthread之MUTEX与Condition用法》中介绍pthread中Mutex与Condition的用法。


这篇关于Android中线程同步之MUTEX与Condtion的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/866145

相关文章

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U

MySQL主从同步延迟问题的全面解决方案

《MySQL主从同步延迟问题的全面解决方案》MySQL主从同步延迟是分布式数据库系统中的常见问题,会导致从库读取到过期数据,影响业务一致性,下面我将深入分析延迟原因并提供多层次的解决方案,需要的朋友可... 目录一、同步延迟原因深度分析1.1 主从复制原理回顾1.2 延迟产生的关键环节二、实时监控与诊断方案

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B