Questions tagged «lock-free»

3
原子操作成本
原子操作(比较和交换或原子加/减的任何操作)的成本是多少?它消耗多少个周期?它会暂停SMP或NUMA上的其他处理器,还是会阻止内存访问?它将刷新乱序CPU中的重排序缓冲区吗? 缓存会受到什么影响? 我对流行的现代CPU感兴趣:x86,x86_64,PowerPC,SPARC,Itanium。

6
无锁多线程是真正的线程专家
我正在阅读乔恩·斯凯特(Jon Skeet)对一个问题的回答,他在讲话中提到了这一点: 就我而言,无锁多线程是针对真正的线程专家的,我不是其中之一。 这不是我第一次听到此消息,但是如果您有兴趣学习如何编写无锁多线程代码,那么我发现很少有人谈论您的实际操作方式。 因此,我的问题除了学习关于线程的所有知识外,还从其他地方开始尝试专门编写无锁的多线程代码,以及哪些是很好的资源。 干杯

15
在C ++中是否有生产就绪的无锁队列或哈希实现?
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 2年前关闭。 改善这个问题 对于C ++中的无锁队列,我已经进行了大量的搜索。我找到了一些代码和一些试验-但是没有什么我能编译的。无锁哈希也将是受欢迎的。 摘要:到目前为止,我还没有肯定的答案。没有“生产就绪”库,令人惊讶的是,现有的库都不符合STL容器的API。
80 c++  stl  lock-free 

18
圆形无锁缓冲器
我正在设计一个系统,该系统连接到一个或多个数据提要流,并根据触发结果对数据进行一些分析。在典型的多线程生产者/消费者设置中,我将有多个生产者线程将数据放入队列中,并且有多个消费者线程读取数据,并且消费者只对最新数据点加n个点感兴趣。如果慢速使用者无法跟上生产者线程,则生产者线程将不得不阻塞,当然,当没有未处理的更新时,使用者线程也会阻塞。使用具有读取器/写入器锁定的典型并发队列会很好地工作,但是数据输入的速率可能很大,因此我想减少我的锁定开销,特别是为生产者减少写入器锁定。我认为我需要一个循环无锁缓冲区。 现在有两个问题: 循环无锁缓冲区是否是答案? 如果是这样,在我提出自己的建议之前,您知道任何适合我需要的公共实施方式吗? 始终欢迎实现循环无锁缓冲区的任何指针。 顺便说一句,在Linux上的C ++中执行此操作。 一些其他信息: 响应时间对我的系统至关重要。理想情况下,使用者线程希望尽快看到任何更新,因为额外的1毫秒延迟可能会使系统一文不值,甚至少很多。 我倾向于的设计思想是一个无半锁的循环缓冲区,在此缓冲区中,生产者线程将数据尽可能快地放入缓冲区中,我们将其称为缓冲区A的头,除非缓冲区已满,否则不要阻塞A与缓冲区Z的末尾相遇。使用者线程将分别持有两个指向循环缓冲区的指针P和P n,其中P是线程的本地缓冲区头,而P n是P之后的第n个项目。每个使用者线程都将推进其P一旦完成当前P的处理,P n和P n就会以最慢的P n前进到缓冲区指针Z的末尾。当P赶上A,这意味着不再有新的更新要处理时,使用者旋转并忙于等待A再次前进。如果使用者线程旋转时间过长,则可以使其进入睡眠状态并等待条件变量,但是我可以接受使用者占用CPU周期等待更新,因为这不会增加我的延迟(我将拥有更多的CPU内核)比线程)。想象一下,您有一个循环的轨道,而生产者在一群消费者的面前运行,关键是调整系统,以便生产者通常比消费者领先几步,而其中大多数操作可以使用无锁技术完成。我知道正确实现实现的细节并不容易...好吧,非常艰苦,这就是为什么我想在别人做些自己的事情之前先从别人的错误中学习。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.