无锁多线程编程是否更容易?

Lot*_*har 4 c multithreading lock-free

我只是阅读了一些关于这个主题的内容,但似乎唯一的好处是绕过争用问题,但它不会对死锁问题产生任何重要影响,因为无锁的代码是如此之小和基本(fifos,生命,哈希),从来没有死锁问题.

所以关于性能 - 这是对的吗?

jer*_*jvl 9

无锁编程(据我所知)总是关于性能,否则在大多数情况下使用锁更简单,因此更可取.

但请注意,使用无锁编程,您最终可能会遇到实时锁定的死锁,这对于诊断来说要困难得多,因为我所知道的工具并不是为了诊断而设计的(尽管我可能在那里做错了).

我会说,如果你不得不走的话,只能沿着无锁的道路前进; 也就是说,你有一个场景,你有一个严重争用的锁,这会损害你的表现.(如果没有损坏,请不要修理它).


小智 9

几个问题.

我们很快将面临64,128和256核心的桌面系统.该领域的并行性与我们目前的2,4,8核心经验不同; 由于争用,在这种小型系统上成功运行的算法将在高度并行的系统上运行得更慢.

从这个意义上讲,无锁是很重要的,因为它对解决可伸缩性有很大贡献.

还有一些非常特定的区域,其中无锁是非常方便的,例如Windows内核,其中存在禁止任何类型的睡眠(例如等待)的执行模式,这显然对于数据结构是非常有限的. ,但无锁的地方提供了一个很好的解决方案.

此外,无锁数据结构通常没有故障模式; 它们实际上不会失败,基于锁的数据结构当然无法获得锁定.不必担心失败会简化代码.

我已经编写了一个无锁数据结构库,我将很快发布.我认为如果开发人员可以获得经过充分验证的API,那么他就可以使用它 - 无论是否无锁,都无关紧要,他不需要担心底层实现的复杂性 - 以及这是要走的路.

  • http://www.liblfds.org不要抱有希望 - 只有一些简单的数据结构.ringbuffer是最有用的.最近两三个月的时间用于构建在线基础设施并使代码可访问(在流行的平台上轻松构建等).一旦我完成了一个合适的单链表和基于该表的哈希,我认为该库真的会开始变得有用.此外,我不建议使用第3版 - 太多问题(主要是构建相关,但也是从void指针到结构的主要API更改将在第4版中发布). (2认同)