• c# 线程同步各类锁


     1)原子操作(Interlocked):所有方法都是执行一次原子读取或一次写入操作。

      2)lock()语句:避免锁定public类型,否则实例将超出代码控制的范围,定义private对象来锁定。

      3)Monitor实现线程同步

        通过Monitor.Enter() 和 Monitor.Exit()实现排它锁的获取和释放,获取之后独占资源,不允许其他线程访问。

        还有一个TryEnter方法,请求不到资源时不会阻塞等待,可以设置超时时间,获取不到直接返回false。

      4)ReaderWriterLock

        当对资源操作读多写少的时候,为了提高资源的利用率,让读操作锁为共享锁,多个线程可以并发读取资源,而写操作为独占锁,只允许一个线程操作。

      5)事件(Event)类实现同步

        事件类有两种状态,终止状态和非终止状态,终止状态时调用WaitOne可以请求成功,通过Set将时间状态设置为终止状态。

        1)AutoResetEvent(自动重置事件)

        2)ManualResetEvent(手动重置事件)

      6)信号量(Semaphore)

          信号量是由内核对象维护的int变量,为0时,线程阻塞,大于0时解除阻塞,当一个信号量上的等待线程解除阻塞后,信号量计数+1。

          线程通过WaitOne将信号量减1,通过Release将信号量加1,使用很简单。

      7)互斥体(Mutex)

          独占资源,用法与Semaphore相似。

       8)跨进程间的同步

          通过设置同步对象的名称就可以实现系统级的同步,不同应用程序通过同步对象的名称识别不同同步对象。

  • 相关阅读:
    MySQL修改表中字段的字符集
    JMM内存模型相关笔记整理
    可重入锁与不可重入锁
    ForkJoin、并行流计算、串行流计算对比
    CyclicBarrier的用法
    git笔记整理-learnGitBranching
    Git 学习相关笔记
    《0day2》学习笔记-part5(书目第十二章(上))
    《0day2》学习笔记-part4(书目第八、九、十、十一章)
    《0day2》学习笔记-part3(书目第六、七章)
  • 原文地址:https://www.cnblogs.com/yy1234/p/7691075.html
Copyright © 2020-2023  润新知