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



我已经实现了一个简单的循环屏障,但是从快速测试中,我意识到,如果您设置了一个障碍,例如2个线程,但是有4个线程即将到达屏障()然后,您将同时在关键部分中获得2对线程。同样,使用6个线程将同时在关键部分中获得3对线程(我对此的测试尚未很好地测试)

我的问题是,如果n线程通过障碍并输入关键部分,我如何停止其他n个线程进入关键部分的组,而关键部分已经在使用?

预先感谢。

n then线到达后,所有n将立即被允许越过屏障并争夺关键部分。(n 1)'到(2n-1)'th将再次等到第二个线程到达障碍,一旦到达,全部(n 1)'th the th th th th th th th th th th th th th ther ther ther ther ther ther ther ther ther th th th th th ther th ther ther ther th ther th ther th ther th ther th ther th ther th'争夺关键部分。您可以将AtomicInteger定为0初始化,并在关键部分之前每次将其递增。还请检查其值是否变为n,然后块/退出/返回所有其他线程。

顺便说一句,仅原子素的增量并检查它已成为n,就足够了,可以允许n个线程,并且剩下的拒绝,如果使用的是,在这里使用的环状屏障将导致所有第一个n线程都会竞争关键部分在一起。(如果只有一个线程要执行代码部分,则仅称其为关键部分,否则将其称为" n线允许的区域")就像人们在至少有n人之前不允许在餐桌上吃饭的人,一旦有n人,所有这些都可以一起吃晚餐:)

相关内容

最新更新