zoukankan      html  css  js  c++  java
  • C# 线程同步

    Mutex 类

    使用Mutex类来同步两个单独的程序。Mutex是一种原始的同步方式,其只对一个线程授予对共享资源的独占访问。

               const string NutexName = "C";
                using (var m = new Mutex(false, NutexName))
                {
                    if (!m.WaitOne(TimeSpan.FromSeconds(1), false))
                    {
                        Console.WriteLine("运行1");
                    }
                    else
                    {
                        Console.WriteLine("运行2");
                        Console.ReadLine();
                        m.ReleaseMutex();
                    }
                }

    互斥量是全局的操作系统对象,请务必正确关闭互斥量。最好是使用Uing代码块来包裹互斥对象

    当主程序启动,定义了一个制定名称的互斥量,设置initialOwner 标志为 false。这意味着如果互斥量已经被创建,则允许程序获取该互斥量。

    如果没有获取到互斥量,程序则简单的显示Runing,等到直到按下了任何键释放该互斥量并退出。

    如果再运行同样一个程序则会在5秒内尝试获取互斥量。如果此时在第一个程序中按下了任意键,第二个程序则会开始执行,然后如果等待保持五秒,就无法获取到。

     

    SemaphoreSlim 类

    SemaphoreSlim类是如何作为Semaphore类的轻量级版本的。该类显示了同时放一个资源的线程数量。

     

    AutoResetEvent类

    从一个线程向另一个线程发送通知,AutoReseEvent类可以通知等待的线程有某事件发生。

     

    ManualResetEventSlim类

    在线程间以更灵活的方式传递信号。

     

    CountDownEvent 类

    信号类来等待直到一定的数量操作完成。

     

    Barrier 类

    Barrier类用于组织多个线程及时在某个时刻碰面。其提供了一个回调函数,每次线程调用了SignalAndWait方法后该回调函数会被执行。

     

    ReaderWriterLockSlim 类

    使用ReaderWriterLockSlim 来创建一个线程安全的机制,在多线程中对一个集合进行读写操作。

    ReaderWriterLockSlim代表了一个管理资源访问的锁,允许多个线程同时读取,以及独占写。

     

    SpinWait类

    如何不使用内核模型的方式来使线程等待。另外,我们介绍了SpinWait,它是一个混合同步构造,被设计为使用用户模式等待一段时间,

    然后切换倒内核模式以节省CPU时间。

    名称:多罗贝勒
    博客地址:http://www.cnblogs.com/objctccc/
    欢迎转载

  • 相关阅读:
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    72. Edit Distance
    583. Delete Operation for Two Strings
    582. Kill Process
    indexDB基本用法
    浏览器的渲染原理
    js实现txt/excel文件下载
    git 常用命令
    nginx进入 配置目录时
  • 原文地址:https://www.cnblogs.com/objctccc/p/6155002.html
Copyright © 2011-2022 走看看