首页 > 编程知识 正文

C GUARDEDBY 和EXCLUDES属性字,土属性字

时间:2023-05-05 19:09:00 阅读:237238 作者:3387

在梳理ADB源码的时候,看到代码中函数中有大写的GUARDED_BY和EXCLUDES等字眼。一开始猜想可能是宏定的什么变量吧。但是一番检索后并没有发现有哪里定义,并且我之前都没有接触过这样的额用法。
/system/core/adb/adb_listeners.cpp

...static ListenerList& listener_list GUARDED_BY(listener_list_mutex) = *new ListenerList();...static void listener_disconnect(void* arg, atransport*) EXCLUDES(listener_list_mutex) {...}

经过查找,后来发现这些都是在Clang Thread Safety Analysis(线程安全分析)中定义的属性,Clang Thread Safety Analysis是C ++语言扩展,它警告代码中潜在的竞争条件。分析是完全静态的(即编译时);没有运行时开销。该分析仍在积极开发中,但已经足够成熟,可以在工业环境中进行部署。它是由Google与CERT / SEI合作开发的,并广泛用于Google的内部代码库中。

GUARDED_BY

GUARDED_BY是数据成员的属性,该属性声明数据成员受给定功能保护。对数据的读操作需要共享访问,而写操作则需要互斥访问。
该 GUARDED_BY属性声明线程必须先锁定listener_list_mutex才能对其进行读写listener_list,从而确保增量和减量操作是原子的

EXCLUDES

EXCLUDES是函数或方法的属性,该属性声明调用方不拥有给定的功能。该注释用于防止死锁。许多互斥量实现都不是可重入的,因此,如果函数第二次获取互斥量,则可能发生死锁。
在上面代码中的EXCLUDES表示的意思是:调用listener_disconnect()函数的调用用不能拥有listener_list_mutex锁。

当然,还有其他的属性,已经有官方文档,我就不多赘述,有需要的请访问CLANG的文档-线程安全分析

参考:http://clang.llvm.org/docs/ThreadSafetyAnalysis.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。