一尘晓灰

但却感觉距离还是很远...

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())锁。以此实现机制来达到同步的目的,与其它同步机制(如上下文同步等)相比只是同步的粒度不同而已(此类同步方法)。

阅读更多
个人分类: 读书笔记
想对作者说点什么? 我来说一句

实验二:线程的同步

2013年05月31日 113KB 下载

传统线程同步通信技术二

2012年04月13日 76.58MB 下载

C#.net数据库操作类

2009年09月08日 33KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭