是否有与 Java 的 CountDownLatch 等效的 C#?

Posted

技术标签:

【中文标题】是否有与 Java 的 CountDownLatch 等效的 C#?【英文标题】:Is there a C# equivalent to Java's CountDownLatch? 【发布时间】:2010-12-23 20:34:50 【问题描述】:

【问题讨论】:

【参考方案1】:

.NET Framework 版本 4 包含新的 System.Threading.CountdownEvent 类。

【讨论】:

我将比较这两个答案,我可能不得不将它授予您(CesarGon)...看来您的更好,因为您提供了一个已经内置于 C# 中的解决方案。 这很公平,Lirik。 :-)【参考方案2】:

这是一个简单的实现(来自9 Reusable Parallel Data Structures and Algorithms):

要构建倒计时锁,您只需 将其计数器初始化为 n,并有 每个从属任务原子地 完成后减一, 例如通过包围 带锁的减量操作或 调用 Interlocked.Decrement。 然后,不是 take 操作,而是一个 线程可以递减并等待 计数器变为零;什么时候 醒来,它会知道有 n 个信号 已在闩锁中注册。 而不是在这种情况下旋转, 如 while (count != 0),通常是 让等待线程的好主意 块,在这种情况下,您必须 使用事件。

public class CountdownLatch 
    private int m_remain;
    private EventWaitHandle m_event;

    public CountdownLatch(int count) 
        m_remain = count;
        m_event = new ManualResetEvent(false);
    

    public void Signal() 
        // The last thread to signal also sets the event.
        if (Interlocked.Decrement(ref m_remain) == 0)
            m_event.Set();
    

    public void Wait() 
        m_event.WaitOne();
    

【讨论】:

以上是关于是否有与 Java 的 CountDownLatch 等效的 C#?的主要内容,如果未能解决你的问题,请参考以下文章

AS3 是不是有与 Java 的 NumberFormat 类似的类

是否有与 Java 正则表达式中的交集 (&&) 运算符等效的 JavaScript 正则表达式?

AWS SDK Java 版本 2 - 是不是有与版本 1 中的 doesObjectExist() 等效的版本?

NPM 是不是有与 java .war 文件等效的文件?

CORBA 中是不是有与 writeReplace 等价的方法?

是否有与 Haskell 'let' 等效的 Python