等待同步技术示例
更新:2007 年 11 月
本示例说明了如何使用 WaitHandle 类进行线程同步。派生自 WaitHandle 的类型 Mutex 用于强行相互实施对受保护代码块的独占访问权。
有关使用这些示例的更多信息,请参见下面的主题:
使用命令提示生成示例
打开命令提示窗口,然后定位到该示例的语言特定子目录之一。
根据所选择的编程语言,在命令行上键入 msbuild WaitSynchronizationCS.sln 或 msbuild WaitSynchronizationVB.sln。
使用 Visual Studio 生成示例
打开 Windows 资源管理器,然后定位到该示例的语言特定子目录之一。
根据所选择的编程语言,双击 WaitSynchronizationCS.sln 或 WaitSynchronizationVB.sln 的图标,从而在 Visual Studio 中打开该文件。
在“生成”菜单上单击“生成解决方案”。
运行示例
定位到包含新的可执行文件的目录。
在命令行上键入 Mutex.exe。
说明: 此示例生成一个控制台应用程序。您必须在控制台窗口中启动它才能查看它的输出。
备注
此示例对 5 个异步方法调用进行排队。每个方法等待拥有资源,写入控制台,休眠,然后再次写入控制台。
下面的列表内容简要介绍本示例使用的技术和类:
线程同步
Mutex 为线程同步提供互斥。
AutoResetEvent 此示例的主线程等待 AutoResetEvent 直至完成对它的设置。这表明最后一批异步函数完成了它们的工作。
WaitHandleWaitHandle 类是基类,Mutex 和 AutoResetEvent 类(还有其他的类)都是从这一基类派生的。此类型实现方法以“等待”各派生类型变为终止状态。
Interlocked 此示例使用静态 Decrement 方法异步访问计数器变量,以指示应在何时设置 AutoResetEvent。
线程处理
- ThreadPool 编写托管代码时,建议开发人员尽可能使用 QueueUserWorkItem 方法来实现异步方法调用。此示例使用此方法来执行争用逻辑资源的代码。
委托
- WaitCallback 用于创建一个类型安全的回调方法,供 ThreadPool 类使用。
有关线程处理和同步的更多信息,请参见源代码和 build.proj 文件中的注释。