• 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/
    欢迎转载

  • 相关阅读:
    oracle之同义词
    oracle之序列
    oracle之视图
    oracle表空间
    oracle 闪回技术
    oracle权限管理
    oracle的undo表空间
    创建数据库之间的连接
    oracle监听
    oracle11g文件系统库迁移到ASM库上面
  • 原文地址:https://www.cnblogs.com/objctccc/p/6155002.html
Copyright © 2020-2023  润新知