lock、Monitor:

lock是Monitor的语法糖

[MethodImpl(MethodImplOptions.Synchronized)]:

特性标记一个方法是需要被同步的,最终实现的效果与使用lock关键字相同。

SpinLock:

自旋锁,当SpinLock请求进入临界区时,会反复地旋转(执行空循环),直至锁变为可用的。如果请求锁所需时间非常短,则空转可比阻塞提供更好的性能,因为不换切换线程。但是,如果锁保留数十个周期以上,则SpinLock性能很差。

Mutex:

Mutex的作用也是创建一个临界区以同步对其中对象的访问,方式类似Monitor类,但最大的不同是Mutex支持跨进程的同步。当然其效率也不如Monitor类,在同一进程内通信应首先考虑使用Monitor。


以上都属于排它锁,有时候不需要独占,可以允许一定数量的线程并发访问某个资源。

ReaderWriterLock、ReaderWriterLockSlim:

允许多个线程同时读取一个资源,但在向该资源写入时要求线程等待以获得独占锁。

Semaphore、SemaphoreSlim:

Semaphore类允许指定数目的线程访问某个资源。超过这个数目时,请求该资源的其他线程会一直阻塞,直到某个线程释放信号量。


通知:通知机制是等待另一个线程的信号的所有方法的统称。

Join()方法

AutoResetEvent、ManualResetEvent:

CountdownEvent:CountdownEvent的作用与Semaphore相反,Semaphore中设置了最大可用槽数,当计数为0时(即资源不够用时)则阻塞线程。而CountdownEvent用来统计其它线程结束工作的情况,当监听数变为0时,触发信号。

Barrier:利用 Barrier 类,可以对多个线程进行循环同步,以便它们都在同一个点上阻塞来等待其他线程完成。

Mutex类/ Semaphore类:这两个类均派生自WaitHandle,所以它们均可与WaitHandle的静态方法一起使用。例如,线程可以使用WaitAll方法/WaitAny方法等待,而以下三个条件均可以使这个线程解除阻塞:EventWaitHandle接收到信号,Mutex被释放,Semaphore被释放。

参考:https://www.cnblogs.com/gjhjoy/p/3544361.html

最新文章

  1. MySQL全文索引 FULLTEXT索引和like的区别
  2. iOS之数据解析时<null>的处理
  3. Mysql Error: Host ‘xxx.xxx.xxx.xxx’ is not allowed to connect to
  4. 05Mybatis_入门程序——根据id查询用户
  5. JS通过getBoundingClientRect获取的height可能与css设置的height不一致
  6. 【原】Gradle调用shell脚本和python脚本并传参
  7. Thinkphp关闭缓存方法总结(转)
  8. OpenJudge计算概论-求分数序列和
  9. Windows Kernel Way 扉言
  10. css中的字体样式及元素样式
  11. 连接pgsql
  12. [Unity]SQLite-C#调用
  13. java学习笔记之线程(Thread)
  14. let 和 var定义变量的区别-盼盼Degenerate
  15. 20175312 2018-2019-2 《Java程序设计》结对编程练习_四则运算(第一周:阶段性总结)
  16. Charles篡改后台数据
  17. 【原创】大叔经验分享(33)hive select count为0
  18. 谈谈如何给下拉框option添加点击事件?
  19. Linux学习笔记:常用命令
  20. HanLP中的人名识别分析详解

热门文章

  1. LSTM容易混淆的地方
  2. 物联网架构成长之路(31)-EMQ基于HTTP权限验证
  3. css不常用的4个选择器-个人向
  4. openssl编译安装
  5. SqlHelper发布——比你期望的还要多的多(例如比MyBatis-Pagehelper性能更高)
  6. ocelot性能测试
  7. js-深拷贝浅拷贝
  8. jsTree树插件
  9. ios基础视频
  10. Oh-My-Zsh的配置与使用