【发布时间】:2013-12-02 07:17:42
【问题描述】:
对于高性能多线程系统,是否有确定性的方式/方法来确定可以使用 only 比较和交换(也称为原子操作)来完成哪些并发逻辑,哪些必须使用锁,信号机和/或障碍?
我的系统总是涉及很多并发和多线程问题。有些很简单,如果快速需要一个简单的锁就可以解决;但是对于一些复杂的问题,或者将性能推向极限的试验,我发现我没有一致的确定性方法来判断问题是否可以仅使用 CAS 来解决。举个例子:
典型的生产者/消费者模型。并发队列只能使用 CAS 解决问题。
生产者/消费者模型有很多更新,但消费混合。在这种情况下,如果使用双缓冲,则必须应用读/写锁;但是,如果我们使用三重缓冲,那么基本上可以使用 CAS。
粗略地说,我们可以说如果一个逻辑可以分成几个相互依赖的状态,每个状态只需要CAS,那么这样的逻辑可以只用CAS来解决。实际问题似乎要复杂得多,我确实觉得缺乏一种好的方法来划分和确定这种逻辑划分是否可能。
请分享您的经验或任何我不知道的方法。
【问题讨论】:
-
您是在问是否使用 CAS 将
any基于锁的并发算法转换为无锁或无等待并发算法? -
不,我的观点是:给定某种基于锁的算法,是否有系统的方法来确定是否可以将其转换为纯基于 CAS 的无等待算法。
-
如果你在谈论通用结构,那么是的。任何基于锁的数据结构都可以无锁并最终无等待。但是这种通用构造效率低下,只是用来证明事情是可以做到的。如果你想要效率,那么你必须定制设计每个算法。
Maurice Herlihy的论文Impossibility and universality results for wait-free synchronization讨论了这一点
标签: multithreading concurrency atomic compare-and-swap