正在加载图片...
inapub.commi9sASRsstwrebsmeym565 运行在分离的机器上(稍微有一点限制)。由于这些原因,活动有时指的是运行的单个逻辑线程 为什么对象的同步如此重要?考虑一个最糟糕的情况,在完全相同的时刻,代表同一用 户服务的两个对象试图访问相同资源。每一个对象要完成自己的操作,就要阻塞其他对象的 运行。这种情况称为死锁。活动能防止发生死锁,这是通过每次只允许一个对象代表一个用 户运行来实现的。另外,活动在帮助COM+管理线程缓冲方面起着重要作用。 在MTS中,活动内对象的同步是通过将活动连接到单个物理线程,或是一个STA实施的 在一个活动中的对象不能并发执行,因为每个活动仅有一个物理线程。另外,COM+使用复 杂的锁定机制来确保活动中的同步。 每个活动保持着单一的独占锁。当在对象中调用一个方法并且对象的环境存在于一个活 动中时,在允许处理方法调用前,COM+首先要试图获得活动锁。如果获得锁,就由对象处 理调用,直到方法调用完成,才解除锁。如果不能获得锁,就阻塞方法调用,直到获得锁才 调用方法。虽然锁定过程更加复杂,但从高层次观点看,COM+使用逻辑的活动使得多个环 境和多个对象同步,基本上就是每一活动用一个单独的锁。使用锁的过程如图197所示。 COM+活动 ActivitylD=(JMC1150-514 Locked=True ActivityID=(JMCI150-514 环境 ActivityID=IJMC1150-514 图19-7使用锁的过程 环境能存在于创建者的活动或一个新的活动中或者根本没有活动。然而,单个环境不能 跨越多个活动。为了建立和保持这些关系,COM+为每个活动创建独特的用户标识符,称为 ActivityID,存储于每个环境中。 创建活动和 Synchronization属性 随着COM和MTS编程模型的集成,创建活动的方法也发生了改变。使用MTS,每个对象 属于一个活动。当ⅤB客户使用 CreateObject函数或New关键字(及某些表达式),或者 Visual C++客户使用 CoCreatelnstanceeX函数创建MTS对象时,自动地创建了活动。为了在已存在的 活动中创建对象,创建者必须调用 ObjectContext对象中的 Createlnstance函数 正如所想像的,这会导致大量的混乱,MTS的开发者必须意识到逻辑活动的边界,并且 恰当地使用标准的对象创建技术 Create Object or CocreatelnstanceEX)或者 ObjectContext对象 的 Createlnstance函数。 使用COM+,仍然能自动地创建活动,但是活动的创建是通过使用组件的 Synchronization 属性来控制的,而不是基于如何实例化一个组件。实际上, ObjectContext对象的 Createlnstance运行在分离的机器上(稍微有一点限制)。由于这些原因,活动有时指的是运行的单个逻辑线程。 为什么对象的同步如此重要?考虑一个最糟糕的情况,在完全相同的时刻,代表同一用 户服务的两个对象试图访问相同资源。每一个对象要完成自己的操作,就要阻塞其他对象的 运行。这种情况称为死锁。活动能防止发生死锁,这是通过每次只允许一个对象代表一个用 户运行来实现的。另外,活动在帮助 C O M +管理线程缓冲方面起着重要作用。 在M T S中,活动内对象的同步是通过将活动连接到单个物理线程,或是一个 S TA实施的。 在一个活动中的对象不能并发执行,因为每个活动仅有一个物理线程。另外, C O M +使用复 杂的锁定机制来确保活动中的同步。 每个活动保持着单一的独占锁。当在对象中调用一个方法并且对象的环境存在于一个活 动中时,在允许处理方法调用前, C O M +首先要试图获得活动锁。如果获得锁,就由对象处 理调用,直到方法调用完成,才解除锁。如果不能获得锁,就阻塞方法调用,直到获得锁才 调用方法。虽然锁定过程更加复杂,但从高层次观点看, C O M +使用逻辑的活动使得多个环 境和多个对象同步,基本上就是每一活动用一个单独的锁。使用锁的过程如图 1 9 - 7所示。 图19-7 使用锁的过程 环境能存在于创建者的活动或一个新的活动中或者根本没有活动。然而,单个环境不能 跨越多个活动。为了建立和保持这些关系, C O M +为每个活动创建独特的用户标识符,称为 A c t i v i t y I D,存储于每个环境中。 1. 创建活动和S y n c h r o n i z a t i o n属性 随着C O M和M T S编程模型的集成,创建活动的方法也发生了改变。使用 M T S,每个对象 属于一个活动。当 V B客户使用 C r e a t e O b j e c t函数或 N e w关键字(及某些表达式 ),或者 Vi s u a l C + +客户使用C o C r e a t e I n s t a n c e E X函数创建M T S对象时,自动地创建了活动。为了在已存在的 活动中创建对象,创建者必须调用 O b j e c t C o n t e x t对象中的C r e a t e I n s t a n c e函数。 正如所想像的,这会导致大量的混乱, M T S的开发者必须意识到逻辑活动的边界,并且 恰当地使用标准的对象创建技术 (CreateObject or CoCreateInstanceEX)或者O b j e c t C o n t e x t对象 的C r e a t e I n s t a n c e函数。 使用C O M +,仍然能自动地创建活动,但是活动的创建是通过使用组件的 S y n c h r o n i z a t i o n 属性来控制的,而不是基于如何实例化一个组件。实际上, O b j e c t C o n t e x t对象的C r e a t e I n s t a n c e 第1 9章 A S P和事务性We b应用程序计计565 下载 COM+活动 ActivityID={JMC1150-514... Locked=True 环境 ActivityID={JMC1150-514... 环境 ActivityID={JMC1150-514... 环境 ActivityID={JMC1150-514... ASP
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有