使用C ++标准库进行线程安全性分析

时间:2015-05-20 11:34:03

标签: c++ multithreading c++11 clang

这描述了如何使用C ++中的注释完成静态线程安全性分析:http://clang.llvm.org/docs/ThreadSafetyAnalysis.html

如何在std :: mutex和std :: lock_guard之类的标准类型中使用它?

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

2 个答案:

答案 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就足够了。