std::atomic 不一定 使用锁,它可能使用CPU 原生原子指令(无锁),也可能在某些情况下使用锁来实现原子操作,具体是否使用锁可以通过 std::atomic::is_lock_free() 方法判断。 如果平台和数据类型支持无锁的原子操作,通常效率更高,但如果不支持,编译器可能会回退到使用锁或其他锁定机制
你真牛逼,你以为你没有用锁?
你贴的这个ring buffer,是我毕业后写的第一个模块,二十多年了,都快忘了,谢谢提醒
【 在 poocp 的大作中提到: 】
: 那是以前的C++没有提供足够的原子操作,不得不使用汇编而已,完全不值得提倡推广,更不用沾沾自喜。
: 我早都把这种无锁原子操作换成用std::atomic,使用新的C++标准来实现了,能不用汇编尽量不用汇编。
: 随便贴一个我写的无锁环形字符串队列的std::atomic实现。功能是对于多线程竞争更新的字符串内容,无锁让所有更新得到满足,但仅仅最后一个更新有效可读,读的过程中无锁接受新的线程更新请求。类似于一堆线程读写一个全局变量,但不用对这个全局变量上锁,限制是最近一次成功更新有效。
: ...................
--
修改:smartbear FROM 59.108.209.*
FROM 59.108.209.*