用户级线程上无锁编程的实用性

时间:2013-12-23 10:57:44

标签: multithreading lock-free

AFAIK,与基于时间片的调度程序抢占相反,纯用户级线程(ULT)具有将处理器交给其他线程的属性。然而,从我在互联网上冲浪,我发现我们现在有几种抢先的用户线程机制。

记住这一点,想开始讨论用户级线程上无锁编程的好处。我的理解是,无论是否存在抢占式调度程序,Lock free编程的性能都应超过基于互斥/基于信号量的程序。

然而,我仍然感到困惑;由于在没有争用的情况下对互斥锁的获取操作也采用快速路径,因此性能增益不一定足以吸引到无锁方法。

在信号量的情况下,有一个系统调用的调用导致上下文切换,因此无锁方法可以被视为更好的选择。

请同时考虑这两种情况 - ULT配备先发制人机制和没有先发制人机制的机制。

1 个答案:

答案 0 :(得分:1)

这不是一个容易回答的问题,因为它非常通用,它可以归结为您的要求。

我最近一直在考虑使用无锁结构的系统,但是当我们坐下来写出我们的要求时,我们意识到它们实际上并不是我们想要的。我们的系统并不真正需要它们,实际上锁定对我们有帮助,因为我们通常有一个生产者/消费者体系结构,如果没有生成任何东西(即没有任何东西被添加到队列中),那么消费者应该闲置(即阻塞) 。

我最近更详细地写了这篇文章: http://blog.chrisd.info/a-simple-thread-safe-queue-for-use-in-multi-threaded-c-applications/