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开发交流群,用于分享学习心得和讨论相关技术难题。欢迎有兴趣的小伙伴扫码入群,相互学习!

  • 相关阅读:
    Selenium的使用
    Redis防护建议
    爬虫文件存储-3:Redis
    爬虫文件存储-2:MongoDB
    爬虫文件存储-1:mysql
    爬虫文件存储:txt文档,json文件,csv文件
    Python MongoDB 教程
    使用Robo 3T 软件管理MongoDB数据库如何执行命令行shell
    使用Scrapy爬取图书网站信息
    解决Scrapy抓取中文网页保存为json文件时中文不显示而是显示unicode的问题
  • 原文地址:https://www.cnblogs.com/wml-it/p/14808432.html
Copyright © 2011-2022 走看看