C#.NET中的线程同步类(二)

本文就只对以下几个同步类作简单的总结,不做示例代码演示。相关内容:C#.NET中的线程同步类(一) C#.NET中的同步策略

ReaderWriterLock

此同步类是用于允许多线程读和单线程写的场景。既当一个资源正在被特定线程做读操作时,其它线程同时也可以读,但不能写。而当特定线程做的是写操作时,其它线程既不能读也不能写。以此机制来达到保证数据一致的目的,现实中很多应用此机制的实例,如数据库访问就是最明显的例子。

ManualResetEvent/AutoResetEvent

ManualResetEvent对象只能拥有两种状态之一,有信号(True)或无信号(False)。ManualResetEvent类继承于WaitHandle类,其构造函数的参数可确定对象的初始状态。Set()和Reset()方法返回一个布尔值,表示是否进行了成功的修改。AutoResetEvent类的工作方式类似于ManualResetEvent类。它等待时间超时或者事件变成有信号状态,接着将此事件通知等待线程。ManualResetEvent和AutoResetEvent的一个重要区别是AutoResetEvent在WaitOne()方法中改变状态。

Interlocked

MSDN定义:为多个线程共享的变量提供原子操作。此类的方法可以防止可能发生的错误:程序在某个线程正在更新可由其它线程访问的变量时切换上下文;或者当两个线程在不同的处理器上并发执行时,此类操作不引发异常。常用方法:

Increment和Decrement方法递增或递减变量并将结果值存储在单个操作中。Exchange方法自动交换指定变量的值。CompareExchange方法比较两个值以及根据比较的结果将第三个值存储在其中一个变量中。

SynchronizationAttribute

此类继承自ContextAttribute类,应用于上下文同步机制,与ContextBoundObject类一同定义一个上下文同步的类。SynchronizatonAttribute类包含了实例变量、实例方法和应用这个属性的类的实例字段,但它不处理静态字段和方法的同步,如果必须同步特定的代码块,它也不起作用。示例见本人空间中同步策略及上下文的读书笔记。

MethodImplAttribute

位于System.Runtime.CompilerServices命名空间,指定如何实现某方法的详细信息。此类可以作用于实例方法和静态方法,如果在实例方法前加上[MethodImpl(MethodImplOptions.Synchronized)]标记,相当于对整个方法添加了lock(this)锁,而对静态方法前加此标记,相当于对整个方法添加了lock(typeof())锁。以此实现机制来达到同步的目的,与其它同步机制(如上下文同步等)相比只是同步的粒度不同而已(此类同步方法)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值