这描述了如何使用C ++中的注释完成静态线程安全性分析:http://clang.llvm.org/docs/ThreadSafetyAnalysis.html
如何在std :: mutex和std :: lock_guard之类的标准类型中使用它?
mutex.h的示例代码注释了自定义接口。我是否在那里定义了“Mutex”类型并使用带注释方法的std :: mutex实现了一个类,或者Clang是否以某种方式带来了带注释的类型?
答案 0 :(得分:1)
实现所提供的mutex.h文件中描述的接口,并使用std :: mutex类来执行此操作。这是一个半完成的实现:
对mutex.h文件进行轻微更改以包含std :: mutex对象
class CAPABILITY("mutex") Mutex {
private:
std::mutex std_mutex;
public:
// Acquire/lock this mutex exclusively. Only one thread can have exclusive
// access at any one time. Write operations to guarded data require an
// exclusive lock.
然后在mutex.cpp
中实现其余部分#include "mutex.h"
void Mutex::Lock(){
this->std_mutex.lock();
}
void Mutex::Unlock(){
this->std_mutex.unlock();
}
bool Mutex::TryLock(){
return this->std_mutex.try_lock();
}
答案 1 :(得分:1)
在clang的最新版本中,您可能不再需要包装std :: mutex,因为线程安全注释是included since March 15, 2016。
这为std :: mutex和。添加了clang线程安全注释 std :: lock_guard所以使用这些类型的代码可以直接使用这些类型 而不是必须包装类型以提供注释。这些检查 当由-Wthread-safety启用时,提供简单但有用的静态 检查以发现潜在的竞争条件。
有关详细信息,请参阅http://clang.llvm.org/docs/ThreadSafetyAnalysis.html。
所以简单地拥有-Wthread-safety
就足够了。