用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
就足够了。
这描述了如何在 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
就足够了。