dotnet 锁和线程同步
一、Monitor 以及 语法糖 lock
1、需要锁定引用类型,引用类型数据结构存在特殊的标记位,值类型每次都会被装箱成新对象
2、lock 反编译后是try finally 里面包围的 Monitor.Enter 和 Monitor.Release
二、重置事件
1、分为AutoResetEvent和ManualResetEvent
2、ManualResetEvent需要手动执行Reset(),不然下一次WaitOne无法锁定
3、AutoResetEvent不需要手动执行Reset(),手动执行似乎也无影响
4、带Slim后缀的对象性能更好
三、Semaphore 可以设定同时进入的线程数量
四、ReadWriteLock
1、同时多个读
2、同时一个写
3、同时仅仅一个可以升级为写锁
评论 (0)