更新:2007 年 11 月
本示例说明了 ReaderWriterLock 线程同步类的使用情况。ReaderWriterLock 类型的功能允许开发人员编写这样的代码:当线程写入或修改资源时该代码强行实施对共享资源的独占访问权,当读取或查询资源时该代码允许非独占的访问权。
有关使用这些示例的更多信息,请参见下面的主题:
使用命令提示生成示例
打开命令提示窗口,然后定位到该示例的语言特定子目录之一。
根据所选择的编程语言,在命令行上键入 msbuild ReaderWriterSynchronizationCS.sln 或 msbuild ReaderWriterSynchronizationVB.sln。
使用 Visual Studio 生成示例
打开 Windows 资源管理器,然后定位到该示例的语言特定子目录之一。
根据所选择的编程语言,双击 ReaderWriterSynchronizationCS.sln 或 ReaderWriterSynchronizationVB.sln 的图标,从而在 Visual Studio 中打开该文件。
在“生成”菜单上单击“生成解决方案”。
运行示例
定位到包含新的可执行文件的目录。
在命令行上键入 ReaderWriter.exe。
说明:
此示例生成一个控制台应用程序。您必须在命令提示窗口中启动它才能查看它的输出。运行此示例时,请注意每个编写器的“Start Writing”(开始写入)和“Stop Writing”(停止写入)输出将接连发生。这是因为与读取器不同,编写器拥有对资源的独占访问权。
备注
有关线程同步和独占访问权的更多信息,请参见源代码和 build.proj 文件中的注释。
下面的列表内容简要介绍本示例使用的类和技术。
- 线程同步
ReaderWriterLock用于保护作为对 Sleep 的调用而实现的逻辑资源。使用 ReaderWriterLock 类型的线程可以采用两种不同的方式持有锁。首先,线程可以持有读取锁,读取锁是非独占的,将允许其他线程获得类的读取锁。第二,线程可以请求一个写入锁,写入锁是独占的,只有在当前被持有的读取锁和写入锁都得到释放后,才能将写入锁授予其他线程。
AutoResetEvent该示例的主线程等待 AutoResetEvent 对象,直至完成对该对象的设置,这指示最后一批异步函数完成了它们的工作。
Interlocked该示例使用静态 Interlocked.Increment 和 Interlocked.Decrement 方法异步访问计数器变量以指示应在何时设置 AutoResetEvent。
线程处理
- ThreadPool 编写托管代码时,建议开发人员尽可能使用 QueueUserWorkItem 方法来实现异步方法调用。此示例使用此方法来执行争用逻辑资源的代码。
委托
- WaitCallback 用于创建一个类型安全的回调方法,供 ThreadPool 类使用。