用C++标准库分析Clang线程安全

Clang thread safety analysis with C++ standard library

这描述了如何在 C++ 中使用注解进行静态线程安全分析:http://clang.llvm.org/docs/ThreadSafetyAnalysis.html

我如何将其与 std::mutex 和 std::lock_guard 等标准类型一起使用?

mutex.h的示例代码注释了一个自定义接口。我是否拥有在那里定义的类型 "Mutex" 并使用带注释的方法使用 std::mutex 实现 class 还是 Clang 以某种方式带来带注释的类型?

实现所提供的 mutex.h 文件中描述的接口,并使用 std::mutex class 来实现。即这里是一个半完成的实现:

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();
}

在最新版本的 clang 中,您可能不必再包装 std::mutex,因为线程安全注释是 included since March 15, 2016.

This adds clang thread safety annotations to std::mutex and std::lock_guard so code using these types can use these types directly instead of having to wrap the types to provide annotations. These checks when enabled by -Wthread-safety provide simple but useful static checking to detect potential race conditions.

See http://clang.llvm.org/docs/ThreadSafetyAnalysis.html for details.

所以只要 -Wthread-safety 就足够了。