在阅读陈硕老师的 muduo 网络库代码时,看到有以下的使用方式(GUARDED_BY ----> THREAD_ANNOTATION_ATTRIBUTE__ ----> __attribute__)。通过查阅资料得知:
__atrribute__ 是一个编译器指令,它指定声明的特征,允许更多的错误检查和高级优化。关键字__attribute__后跟两组括号(双括号使“宏输出”变得容易,尤其是多个属性)。括号内是逗号分隔的属性列表。__attribute__指令放在函数,变量和类型声明之后。[1]
如本例中的:
GUARDED_BY(mutex_)
THREAD_ANNOTATION_ATTRIBUTE__(guarded_by(mutex_))
__attribute__((guarded_by(mutex_))
guarded_by属性是为了保证线程安全,使用该属性后,线程要使用相应变量,必须先锁定mutex_
使得pendingFunctors_是原子操作。