- 主题:c++太复杂了,我承认这几行代码我一辈子写不出来
claude提出还有下面的问题:
1、这句也存在race,主要是wrap-around时。
buffer_[idx] = new_value;
2、 序列号更新逻辑错误
while (seq > current_seq) {
current_seq_.compare_exchange_weak(current_seq, seq, ...);
// 错误:直接跳到 seq,跳过中间序列号
}
- 应该是 seq - 1 等待机制
- 当前实现会导致读线程访问未初始化的槽位
还有一个问题是队列满了直接丢弃新数据。当然,这也算是一种处理策略。
【 在 poocp 的大作中提到: 】
: 这用在Windows UI线程的,UI更新没太高频率,后来的版本我在循环中否定分支加了
: std::this_thread::yield();
: 来主动让出执行周期。
: ...................
--
修改:z16166 FROM 111.199.144.*
FROM 111.199.144.*
+1不是问题,因为get总是拿的seq。
【 在 z16166 的大作中提到: 】
: claude提出还有下面的问题:
: 1、这句也存在race,主要是wrap-around时。
: buffer_[idx] = new_value;
: ...................
--
FROM 171.221.52.*
这两个AI都没提64位seq用满了翻转的问题呢,其实也有解决方案,不过由于这是天文数字到不了,就没加这部分代码了。
【 在 z16166 的大作中提到: 】
: claude提出还有下面的问题:
: 1、这句也存在race,主要是wrap-around时。
: buffer_[idx] = new_value;
: ...................
--
FROM 171.221.52.*
才看到了你要干什么
真是服了,你弄个share_ptr 不就得了?加个自旋锁这点访问量有什么问题?
你弄这个大个内存,系统内存不要钱啊?
【 在 poocp 的大作中提到: 】
: 那是以前的C++没有提供足够的原子操作,不得不使用汇编而已,完全不值得提倡推广,更不用沾沾自喜。
: 我早都把这种无锁原子操作换成用std::atomic,使用新的C++标准来实现了,能不用汇编尽量不用汇编。
: 随便贴一个我写的无锁环形字符串队列的std::atomic实现。功能是对于多线程竞争更新的字符串内容,无锁让所有更新得到满足,但仅仅最后一个更新有效可读,读的过程中无锁接受新的线程更新请求。类似于一堆线程读写一个全局变量,但不用对这个全局变量上锁,限制是最近一次成功更新有效。
: ...................
--
FROM 120.245.115.*
你既然已经出来了14年的C++11都没兴趣了解,那我简单说一下自旋锁和std::atomic的关系吧。
自旋锁是基于std::atomic实现的同步原语,用于短临界区互斥。
std::atomic是更底层的原子操作工具,可直接用于无锁编程或构建高级同步机制(如自旋锁、无锁数据结构)。
不愿意了解和接受新技术,是一种衰老的表现。所以有时候衰老不仅表现在身体上,它还表现在思想上。
【 在 smartbear 的大作中提到: 】
: 才看到了你要干什么
: 真是服了,你弄个share_ptr 不就得了?加个自旋锁这点访问量有什么问题?
: 你弄这个大个内存,系统内存不要钱啊?
: ...................
--
FROM 171.221.52.*
这可把我问着了。我抽象思维很差,所以理解不了。你们努力吧,我退休了。
【 在 z16166 的大作中提到: 】
: C的抽象能力太弱了,抛弃C吧(除了特定场合),哈哈
:
--
FROM 221.221.52.*
你对C14确实比我熟,但是问题是你堆了一堆代码,用非常复杂的方法解决了一个非常简单的问题,程序运行开销远远不是你以为的atomic原子操作,windows申请释放内存就是带锁的,并且释放内存消耗很大。
所以不管是程序运行开销,软件系统可维护性,你这个方案都不如直接弄个share_ptr简单搞一下,几行代码。
所以,你说你对C14更了解,带来了什么?更高的运行耗时,运行内存,更高的维护成本,更复杂的系统逻辑。
【 在 poocp 的大作中提到: 】
: 你既然已经出来了14年的C++11都没兴趣了解,那我简单说一下自旋锁和std::atomic的关系吧。
: 自旋锁是基于std::atomic实现的同步原语,用于短临界区互斥。
: std::atomic是更底层的原子操作工具,可直接用于无锁编程或构建高级同步机制(如自旋锁、无锁数据结构)。
: ...................
--
FROM 120.245.115.*
真是服了你了,我这几年搞得系统,业界基本独步 ,我们这些人压根不在乎什么新东西,我们在乎能不能赚钱,你懂吗?技术新不新无所谓,业界能不能领先,能不能赚钱才是关键。
【 在 poocp 的大作中提到: 】
: 你既然已经出来了14年的C++11都没兴趣了解,那我简单说一下自旋锁和std::atomic的关系吧。
: 自旋锁是基于std::atomic实现的同步原语,用于短临界区互斥。
: std::atomic是更底层的原子操作工具,可直接用于无锁编程或构建高级同步机制(如自旋锁、无锁数据结构)。
: ...................
--
FROM 120.245.115.*
为啥在楼主的标题下,讨论C++这个语言,你不是跑题到汇编,就跑题到挣钱上呢?
我不关心能不能挣钱,我十多年前就财务自由了,我不需要挣钱,开心就好。
【 在 smartbear 的大作中提到: 】
: 真是服了你了,我这几年搞得系统,业界基本独步 ,我们这些人压根不在乎什么新东西,我们在乎能不能赚钱,你懂吗?技术新不新无所谓,业界能不能领先,能不能赚钱才是关键。
--
FROM 171.221.52.*
说明你还是没看懂,又扯到内存申请和释放上了,或者完全没看,所以说的只是一个老年人在思维固化后,对C++新功能的刻板印象而已。
【 在 smartbear 的大作中提到: 】
: 你对C14确实比我熟,但是问题是你堆了一堆代码,用非常复杂的方法解决了一个非常简单的问题,程序运行开销远远不是你以为的atomic原子操作,windows申请释放内存就是带锁的,并且释放内存消耗很大。
: 所以不管是程序运行开销,软件系统可维护性,你这个方案都不如直接弄个share_ptr简单搞一下,几行代码。
: 所以,你说你对C14更了解,带来了什么?更高的运行耗时,运行内存,更高的维护成本,更复杂的系统逻辑。
: ...................
--
FROM 171.221.52.*