将新线程注册到已定义的屏障

Posted

技术标签:

【中文标题】将新线程注册到已定义的屏障【英文标题】:Register new thread to already defined barrier 【发布时间】:2019-03-07 23:56:54 【问题描述】:

有没有办法将线程添加到已经预定义的屏障?

场景:我在某个时间点有 N 个线程,代码声明 Barrier 以便处理它们。

问题是,有时我可能需要在该屏障实例中处理另一个新线程,但屏障已经声明为仅使用 N 个线程。

例子:

barrier = new Barrier(N, (sprint) =>  
       Console.WriteLine($"Current sprint: sprint.CurrentPhaseNumber")
);

声明后我需要用 N+1 个线程以某种方式再次更新它,有什么建议吗?

【问题讨论】:

【参考方案1】:

关于 Barrier 的完整文档在这里:https://docs.microsoft.com/en-us/dotnet/standard/threading/barrier

简而言之,您可以随时分别调用AddParticipantRemoveParticipant 来添加或删除参与者。

【讨论】:

以上是关于将新线程注册到已定义的屏障的主要内容,如果未能解决你的问题,请参考以下文章

模仿CyclicBarrier,自定义自己屏障类

线程之间的内存栅栏/屏障如何与其他线程中的栅栏/屏障交互?

并发编程系列之CyclicBarrier用法简介

并发编程系列之CyclicBarrier用法简介

当通过的线程数量小于屏障限制时,屏障(例如 CyclicBarrier)是不是会导致死锁?

java CyclicBarrier同步屏障