博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#线程同步
阅读量:6425 次
发布时间:2019-06-23

本文共 1772 字,大约阅读时间需要 5 分钟。

hot3.png

微软官网:

官网上提到下面几种:

lock 

private System.Object lockThis = new System.Object();lock (lockThis){    //需要保护的地方}

VB版是SyncLock

Monitor

System.Object obj = (System.Object)x;System.Threading.Monitor.Enter(obj);try{    DoSomething();}finally{    System.Threading.Monitor.Exit(obj);}

使用 lock 通常比直接使用 Monitor 类更可取,一方面是因为 lock 更简洁,另一方面是因为 lock确保了即使受保护的代码引发异常,也可以释放基础监视器。

Event

与Windows类似,有 AutoResetEvent和ManualResetEvent,如果为自动置位,则对该事件调用WaitForSingleObject()后会自动调用ResetEvent()使事件变成未触发状态。WaitOne,WaitAny和WaitAll则类似WaitForSingleObject/WaitForMultiObject。从字面意义可以看出One表示1个,Any表示1个或多个,All表示所有。

WaitOne causes the thread to wait until a single event becomes signaled, WaitHandle.WaitAny blocks a thread until one or more indicated events become signaled, and WaitHandle.WaitAll blocks the thread until all of the indicated events become signaled. An event becomes signaled when its Set method is called.

Mutex

尽管 mutex 可以用于进程内的线程同步,但是使用 Monitor 通常更为可取,因为监视器是专门为 .NET Framework 而设计的,因而它可以更好地利用资源。 相比之下,Mutex 类是 Win32 构造的包装。 尽管 mutex 比监视器更为强大,但是相对于 Monitor 类,它所需要的互操作转换更消耗计算资源(Mutex可以跨进程,Monitor不行)。

Interlocked

类似MFC的原子操作(InterlockedIncrement...),使用这个类的方法可以安全地递增、递减、交换和比较任何线程中的值。

ReaderWriterLock 

读写锁,通过调用:AcquireReaderLock,ReleaseReaderLock,AcquireWriterLock,ReleaseWriterLock来完成读锁和写锁控制的

Win32其他内核对象

如信号量,可以用来实现生产者/消费者模式

SynchronizationAttribute

当我们确定某个类的实例在同一时刻只能被一个线程访问时,我们可以直接将类标识成Synchronization的,这样,CLR会自动对这个类实施同步机制,实际上,这里面涉及到同步域的概念,当类按如下设计时,我们可以确保类的实例无法被多个线程同时访问

 1) 在类的声明中,添加System.Runtime.Remoting.Contexts.SynchronizationAttribute属性。

   2).继承至System.ContextBoundObject,必须

MethodImplAttribute

如果临界区是跨越整个方法的,也就是说,整个方法内部的代码都需要上锁的话,使用MethodImplAttribute属性会更简单一些。这样就不用在方法内部加锁了,只需要在方法上面加上 [MethodImpl(MethodImplOptions.Synchronized)] 就可以了。

转载于:https://my.oschina.net/shanlilaideyu/blog/485363

你可能感兴趣的文章
android adb命令
查看>>
python “双”稀疏矩阵转换为最小联通量“单”矩阵
查看>>
揭秘天猫双11背后:20万商家600万张海报,背后只有一个鹿班
查看>>
重置mysq root密码脚本
查看>>
MHA配置参数
查看>>
深入理解Lock
查看>>
vim的块选择
查看>>
HTML --块
查看>>
一个不错的loading效果
查看>>
Debian允许root用户登录
查看>>
linux的文件系统
查看>>
上云利器,K8S应用编排设计器之快到极致
查看>>
袋鼠云服务案例系列 | 从DB2到MySQL,某传统金融平台的互联网转型之路
查看>>
RealServer配置脚本
查看>>
九月份技术指标 华为交换机的简单配置
查看>>
python 写json格式字符串到文件
查看>>
分布式文件系统MogileFS
查看>>
Java23种设计模式案例:策略模式(strategy)
查看>>
XML解析之DOM4J
查看>>
图解微服务架构演进
查看>>