监视器同步技术示例
更新:2007 年 11 月
本示例说明如何使用 Monitor 类进行线程同步。Monitor 类型的静态函数用于强行相互实施对受保护代码块的独占访问权。
有关线程同步和 Monitor 类的更多信息,请查看源代码和 build.proj 文件中的注释。
有关使用这些示例的更多信息,请参见下面的主题:
使用命令提示生成示例
打开命令提示窗口,然后定位到该示例的语言特定子目录之一。
根据所选的编程语言,在命令行中键入 msbuild MonitorSynchronizationCS.sln 或 msbuild MonitorSynchronizationVB.sln。
使用 Visual Studio 生成示例
打开 Windows 资源管理器,然后定位到该示例的语言特定子目录之一。
根据所选择的编程语言,双击 MonitorSynchronizationCS.sln 或 MonitorSynchronizationVB.sln 的图标,从而在 Visual Studio 中打开该文件。
在“生成”菜单上单击“生成解决方案”。
运行示例
使用命令提示定位到包含新的可执行文件的目录。
在命令行上键入 Monitor.exe。
说明: |
---|
此示例生成一个控制台应用程序。必须使用命令提示来启动该程序,才能查看相应的输出。运行此示例时,请注意每个编写器的“Start Writing”和“Stop Writing”输出将接连发生,而具有不同 ID 的线程之间不会出现重叠。这是因为各个线程拥有对资源的独占访问权。 |
备注
下面的列表内容简要介绍本示例使用的类和技术。
线程同步
Monitor 提供了进入和退出受保护代码块的静态函数。您不能实例化 Monitor 类型的实例。相反,应向其静态方法传递一个对要用作单个同步节点的任何对象派生类型的引用。
说明: Visual Basic 和 C# 都实现特殊关键字以利用 Monitor 类型的静态方法。C# 使用 lock 关键字,而 Visual Basic 使用 SyncLock 关键字。
AutoResetEvent 此示例的主线程等待 AutoResetEvent 对象直至完成对该对象的设置,这指示最后一批异步函数完成了它们的工作。
Interlocked 此示例使用静态 Decrement 方法异步访问计数器变量以指示应何时设置 AutoResetEvent。
线程处理
- ThreadPool 编写托管代码时,建议开发人员尽可能使用 QueueUserWorkItem 方法来实现异步方法调用。此示例使用此方法来执行需要争取逻辑资源的代码。
委托
- WaitCallback 用于创建一个类型安全的回调方法,供 ThreadPool 使用。