gpt4 book ai didi

c++ - C++ 中的无锁数据结构 = 仅使用原子和内存排序?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:29:21 25 4
gpt4 key购买 nike

我曾经看到术语“无锁数据结构”并认为“哦哦哦,那一定非常复杂”。然而,我一直在阅读“C++ Concurrency in Action”,它似乎编写了一个无锁数据结构,你所做的就是停止使用互斥锁/锁并用原子代码替换它们(以及可能的内存排序障碍)。

所以我的问题是 - 我在这里遗漏了什么吗?由于 C++11,它真的那么简单吗?写无锁数据结构只是用原子操作代替锁的情况吗?

最佳答案

噢噢噢,但这真的很复杂。

如果您看不出互斥锁和原子访问之间的区别,那么您看待并行处理的方式就有问题,您编写的代码很快就会有问题。

它很可能会比等效的阻塞版本运行得慢,如果您(或者更确切地说是您的同事)真的不走运,它会偶尔喷出不一致的数据并随机崩溃。

更有可能的是,它会将实时约束传播到应用程序的大部分,迫使您的同事浪费大量时间来应对他们和他们的软件在没有这些要求的情况下会非常愉快地生活的任意要求,并求助于各种迷信混淆代码提交的良好做法。

哦,好吧,只要模板人员和无等待人员玩得开心......


并行处理,无论是阻塞的还是无等待的,本质上都是资源消耗,实现起来复杂且成本高昂。设计一个真正利用非平凡并行处理优势的软件架构是专家的工作。

相反,一个好的软件设计应该将并行性限制在最低限度,让大多数程序员可以自由地实现线性、顺序代码。

至于 C++,我发现将字符串、线程和咖啡机随意包装在同一个语法 goo 中的整个哲学是灾难性的设计选择。

C++ 允许您从任何东西中创建一个多处理器同步对象,就像您分配一个字符串一样,这类似于在同一个展示柜中将突击步枪放在水枪旁边。

毫无疑问,很多人都靠推销突击步枪和水枪并无太大区别的想法谋生。但他们仍然是。

关于c++ - C++ 中的无锁数据结构 = 仅使用原子和内存排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21070747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com