我有一个用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(