这种同步方法的名称是啥?
Posted
技术标签:
【中文标题】这种同步方法的名称是啥?【英文标题】:What is the name of this synchronisation method?这种同步方法的名称是什么? 【发布时间】:2016-12-14 19:10:14 【问题描述】:我有一个特殊的编程结构,它允许线程等待,直到另一个线程一次释放所有等待的线程。 每个线程都可以注册自己以等待可由另一个线程触发的外部事件(例如,侦听用户输入的线程)。一旦该事件发生,所有线程都可以继续并立即注销。
我的问题是:这样的结构叫什么?
起初我想到了互斥锁,但据我所知,互斥锁是一种只允许一个线程同时运行的构造(请参阅此链接https://www.quora.com/Semaphore-vs-mutex-vs-monitor-What-are-the-differences)。
对我来说,这个构造听起来像是 java 中的移相器,但我的构造没有计数逻辑,所以我想知道正确的措辞是什么。
【问题讨论】:
它们是等待句柄。您应该指定语言。 这是一种没有人知道的自定义编程语言。 【参考方案1】:相关的 Java 和 C# 类中包含“障碍”一词,所以这可能就是您想要的。
【讨论】:
根据javadoc of CyclicBarrier,屏障是一个最多可以等待 n 个线程的构造。一旦等待线程的数量达到配置的数量 n,屏障就会被打破。这不是我所拥有的,因为在我的情况下,必须明确打破“障碍”。【参考方案2】:正确答案是:这更像是一个监视器的条件变量。引用Wikipedia:
条件变量本质上是线程容器 等待某个条件。监视器提供了一种机制 线程暂时放弃独占访问以等待 在重新获得独占访问权之前需要满足一些条件 继续他们的任务。
Java 的wait 和notifyAll 是一个示例实现。
【讨论】:
以上是关于这种同步方法的名称是啥?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Flux 时保持 UI 与 ajax 调用同步的惯用方法是啥?
从同步代码调用异步方法并阻塞直到任务完成的正确方法是啥? [复制]