【发布时间】:2017-09-18 15:54:54
【问题描述】:
由于std::lock_guard 不适用于std::atomic_flag,我已经实现了自己的版本:
class atomic_guard {
public:
inline atomic_guard(std::atomic_flag& lock) : lock(lock) {
while (this->lock.test_and_set()) {
/* spin */
};
};
inline ~atomic_guard() {
this->lock.clear();
};
private:
std::atomic_flag& lock;
};
这似乎工作正常。问题是:这是为std::atomic_flag 实施 RAII 的正确方法吗?还有一个内置的防护装置吗?如果不是,为什么?专业化std::lock_guard<std::atomic_flag> 看起来很自然。
【问题讨论】: