首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >N个线程的循环屏障也可以处理n*2个线程。

N个线程的循环屏障也可以处理n*2个线程。
EN

Stack Overflow用户
提问于 2017-09-30 02:31:00
回答 1查看 73关注 0票数 0

我实现了一个简单的循环屏障,但通过快速测试,我意识到,如果为(比如说2个线程)设置了一个屏障,但是有4个线程即将到达barrier.await(),那么您将同时在关键部分获得两个线程对实例。类似地,使用6个线程可以同时在关键部分获得3对线程(由于我对此还不熟悉,所以还没有很好的测试)

我的问题是,如果n个线程通过屏障并进入关键部分,那么在关键部分已经在使用时,如何阻止其他n组线程进入临界部分?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 14:35:04

当n‘s线到达后,所有的n将立即被允许跨越障碍并争夺临界截面。(n+1)'th到(2n-1)'th将再次等待直到2n'th线程到达屏障,一旦(n+1)‘th到2n’th将共同跨越屏障并争夺临界截面。您可以在0初始化一个AtomicInteger,并在关键部分之前每次增加它。另外,如果它的值变为n,那么阻塞/退出/返回所有进一步的线程。

顺便说一句,只有AtomicInteger增量和检查它已经变成n,就足够了,对于允许n个线程,并保留拒绝,循环屏障将做什么,如果在这里使用是,将导致所有的第一个n个线程一起争夺关键部分。(如果只有一个线程应该执行代码部分,那么只称它为关键部分,或者称它为"n个线程允许的区域")就像等待在餐桌上吃饭的人在至少有n个人之前是不允许吃的,一旦有n个人,所有的人都可以一起跳到晚餐上:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46499022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档