多线程-无锁队列如何能保证线程安全?它的实现机制是什么?

发布于 2017-01-22 14:46:19 字数 78 浏览 1885 评论 5

经常看到关于无锁队列的在多线程中应用,这种队列既然无锁,那么如何能保证线程的同步安全问题呢?它的实现机制是什么?对它的应用有什么特定的要求吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

归属感 2017-08-20 05:24:44

无锁的前题就是读与写不在同一个元素上,如果说同一个元素那还是有锁的。只要谈到并发离不开锁。

浮生未歇 2017-07-28 19:31:51

无锁队列本质上还是有锁,只不过锁的粒度很小,通常是一个标志。
一般通过CAS(compare&set)和TAS(test&set)等原子操作结合忙等待实现的。
既然是忙等待那么适用于共享资源不会被长时间占据的情况。

晚风撩人 2017-05-09 10:49:03

java.util.concurrent 这个包下有些应用于并发处理的collection类。
无锁指的是没有用java的对象锁吧,java的并发集合类的实现原理基于将赋值操作放到更小粒度的操作中,由jvm提供一个原子操作(CAS, compare and swap,compare操作是原子的)实现,简单说就是赋值后检查是否赋值成功(变量在此期间有没有被并发修改),赋值成功则返回,否则继续尝试赋值直到成功。
java并发编程实践 这书里有详细介绍。
关于 CAS:http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Frzahw%2Frzahwrzahwcascasco.htm

灵芸 2017-03-03 20:12:42

我知道的就是设置一个标志,当这个标志为true时可以访问这个资源,false时不可访问,每次访问之前判断下

清晨说ぺ晚安 2017-03-02 23:13:31

在网上google到了一篇文章,讲的是在java下的实现,可以参考下。
无锁实现线程安全的并发机制

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文