【发布时间】:2022-01-27 23:59:37
【问题描述】:
这是一个使用std::atomic_flag 实现的基本自旋锁。
book 的作者声称,在 lock() 中的第二个可以提高性能。
class Spinlock
{
std::atomic_flag flag{};
public:
void lock() {
while (flag.test_and_set(std::memory_order_acquire)) {
while (flag.test(std::memory_order_acquire)); //Spin here
}
}
void unlock() {
flag.clear(std::memory_order_release);
}
};
我们在一个额外的内部循环中使用
test()的原因是性能:test()不会使缓存行无效,而test_and_set()会。
有人可以详细说明这句话吗? test 还是读操作,需要从内存中读取吧?
【问题讨论】:
标签: c++ performance atomic