zoukankan      html  css  js  c++  java
  • 线程同步基础知识点

    线程同步基础知识点


    1.原子操作(Interlocked):所有方法都是执行一次原子读取或一次写入操作。
    2.lock()语句:避免锁定public类型,否则实例将超出代码控制的范围,定义private对象来锁定。
    3.Monitor实现线程同步
    通过Monitor.Enter() 和 Monitor.Exit()实现排它锁的获取和释放,获取之后独占资源,不允许其他线程访问。
    还有一个TryEnter方法,请求不到资源时不会阻塞等待,可以设置超时时间,获取不到直接返回false。
    4.ReaderWriterLock
    当对资源操作读多写少的时候,为了提高资源的利用率,让读操作锁为共享锁,多个线程可以并发读取资源,而写操作为独占锁,只允许一个线程操作。
    5.事件(Event)类实现同步
    事件类有两种状态,终止状态和非终止状态,终止状态时调用WaitOne可以请求成功,通过Set将时间状态设置为终止状态。
    5.1 AutoResetEvent(自动重置事件)
    5.2 ManualResetEvent(手动重置事件)
    6.信号量(Semaphore)
    信号量是由内核对象维护的int变量,为0时,线程阻塞,大于0时解除阻塞,当一个信号量上的等待线程解除阻塞后,信号量计数+1。
    线程通过WaitOne将信号量减1,通过Release将信号量加1,使用很简单。
    7.互斥体(Mutex)
    独占资源,用法与Semaphore相似。
    8.跨进程间的同步
    通过设置同步对象的名称就可以实现系统级的同步,不同应用程序通过同步对象的名称识别不同同步对象。


    技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!
    我创建了一个.NET开发交流群,用于分享学习心得和讨论相关技术难题。欢迎有兴趣的小伙伴扫码入群,相互学习!

  • 相关阅读:
    CF1280G Kirchhoff's Current Loss【表达式解析,不等式】
    [AGC040C] Neither AB nor BA
    [AGC040B]Two Contests
    [ARC101E]Ribbons on Tree(容斥,dp)
    [GXOI/GZOI2019]旧词
    [SDOI2015]寻宝游戏
    半平面交初步
    [CF585E]Marbles
    [P5348]密码解锁
    NOIP2018 保卫王国
  • 原文地址:https://www.cnblogs.com/wml-it/p/14808432.html
Copyright © 2011-2022 走看看