1
由於std::lock_guard
不std::atomic_flag
工作,我已經實現了我自己的版本:的std :: atomic_flag和std :: lock_guard
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;
};
這似乎很好地工作。問題是:這是實施RAI的正確方法嗎?還有一個內置的後衛嗎?如果不是,爲什麼?專業std::lock_guard<std::atomic_flag>
看起來很自然。
「低效率」是什麼意思?標準互斥是不是更有效率的atomic_flag?至少在某些情況下,例如當鎖定時間應該是短暫的。 – freakish
@freakish如果一個線程正在等待使用'my_mutex'來獲取鎖,那麼它正在浪費很多CPU時間,因爲它在繁忙的while循環中 – LWimsey
我不會稱之爲「浪費」。你獲得執行時間,所以它是一個交易。看起來atomic_flag甚至可以比標準互斥量快50倍。所以如果你鎖定很短的時間,那麼「浪費」這些CPU週期可能是值得的。這裏是基準測試:https://www.arangodb.com/2015/02/comparing-atomic-mutex-rwlocks/當然,我會在我的場景中進行適當的測試,但我預計至少會有2x加速。 – freakish