与基于时间片的调度程序抢占相反,纯用户级线程(ULT)具有将处理器让给其他线程的特性。然而,从我在互联网上的冲浪中,我看到我们现在有几种抢占式的用户线程机制。
记住这一点,我想开始一场关于用户级线程上无锁编程的好处的讨论。我的理解是,无论是否存在抢占式调度器,无锁编程的性能都应该超过基于互斥/信号量的程序。
然而,我仍然感到困惑;因为互斥锁上的获取操作在没有争用的情况下也采用快速路径,因此性能增益不需要足够吸引人来迁移到无锁方法。
在信号量的情况下,有一个对系统调用的调用导致上下文切换,因此无锁方法可以被视为更好的选择。
请针对配备了抢占机制的ULT和未配备抢占机制的ULT这两种情况提出建议。
发布于 2013-12-23 19:56:31
这不是一个容易回答的问题,因为它非常普遍,它将归结为您的需求是什么。
我最近一直在处理那些考虑使用无锁结构的系统,但当我们坐下来写出我们的需求时,我们意识到它们实际上并不是我们想要的。我们的系统并不真的需要它们,事实上锁对我们有帮助,因为我们通常有一个生产者/消费者架构,如果没有任何东西被产生(即没有任何东西被添加到队列中),那么消费者应该是空闲的(即阻塞的)。
我最近写了一篇更详细的文章:http://blog.chrisd.info/a-simple-thread-safe-queue-for-use-in-multi-threaded-c-applications/
https://stackoverflow.com/questions/20742101
复制相似问题