c-使用C11和__attribute__((cleanup))进行Clang线程安全性分析



我有一个用C(而不是C++(编写的自定义线程和锁库,我想与之一起使用Clang的线程安全分析。

除了我有一个模仿C++的std::lock_guard的伪RAII助手之外,C似乎一切都正常。看起来像这样,

static inline mutex_t* _mutex_autolock_lock(mutex_t* m) {
mutex_lock(m);
return m;
}
static inline void _mutex_autolock_unlock(mutex_t** m) {
mutex_unlock(*m);
}
#define MUTEX_AUTO_LOCK(name, lock) 
mutex_t* name __attribute__((cleanup(_mutex_autolock_unlock))) = 
_mutex_autolock_lock(lock); 
(void)name;

那么代码可以这样使用它,

{
MUTEX_AUTO_LOCK(scoped_lock, &mu);
foo();
// scoped_lock goes out of scope and automatically unlocks mu
}

我不能用Clang的SCOPED_CAPABILITY来实现这一点,因为它(AFAICT(需要一个构造函数,而我在C中没有。有什么方法可以对此进行建模/注释,以便Clang可以将其用于线程安全分析吗?

我不知道这是否回答了你的问题,但你可能想看看这个:C 的线程安全分析(TSA(