CComMultiThreadModelNoCS 类

CComMultiThreadModelNoCS 提供用于递增和递减变量值的线程安全方法,而无需关键部分锁定或解锁功能。

语法

class CComMultiThreadModelNoCS

成员

公共 Typedef

名称 描述
CComMultiThreadModelNoCS::AutoCriticalSection 引用类 CComFakeCriticalSection
CComMultiThreadModelNoCS::CriticalSection 引用类 CComFakeCriticalSection
CComMultiThreadModelNoCS::ThreadModelNoCS 引用类 CComMultiThreadModelNoCS

公共方法

名称 描述
CComMultiThreadModelNoCS::Decrement (静态)以线程安全的方式递减指定变量的值。
CComMultiThreadModelNoCS::Increment (静态)以线程安全的方式增加指定变量的值。

备注

CComMultiThreadModelNoCS 类似于 CComMultiThreadModel,因为它提供了用于递增和递减变量的线程安全方法。 但是,当你通过 CComMultiThreadModelNoCS 引用临界区类时,诸如 LockUnlock 之类的方法将不起作用。

通常,通过 ThreadModelNoCStypedef 名称使用 CComMultiThreadModelNoCS。 此 typedef 是在 CComMultiThreadModelNoCSCComMultiThreadModelCComSingleThreadModel 中定义的。

注意

全局 typedef 名称 CComObjectThreadModelCComGlobalsThreadModel 不会引用 CComMultiThreadModelNoCS

除了 ThreadModelNoCS 之外CComMultiThreadModelNoCS 还会定义 AutoCriticalSectionCriticalSection。 后两个 typedef 名称引用 CComFakeCriticalSection,它提供与获取和释放临界区相关的空方法。

要求

标头:atlbase.h

CComMultiThreadModelNoCS::AutoCriticalSection

使用 CComMultiThreadModelNoCS 时,typedef 名称 AutoCriticalSection 引用类 CComFakeCriticalSection

typedef CComFakeCriticalSection AutoCriticalSection;

备注

由于 CComFakeCriticalSection 不提供临界区,因此其方法不执行任何操作。

CComMultiThreadModelCComSingleThreadModel 还包含 AutoCriticalSection 的定义。 下表显示了线程模型类与 AutoCriticalSection 引用的临界区类之间的关系:

类的定义位置 引用的类
CComMultiThreadModelNoCS CComFakeCriticalSection
CComMultiThreadModel CComAutoCriticalSection
CComSingleThreadModel CComFakeCriticalSection

除了 AutoCriticalSection 之外,你还可以使用 typedef 名称 CriticalSection。 如果要消除 CRT 启动代码,则不应在全局对象或静态类成员中指定 AutoCriticalSection

示例

请参阅 CComMultiThreadModel::AutoCriticalSection

CComMultiThreadModelNoCS::CriticalSection

使用 CComMultiThreadModelNoCS 时,typedef 名称 CriticalSection 引用类 CComFakeCriticalSection

typedef CComFakeCriticalSection CriticalSection;

注解

由于 CComFakeCriticalSection 不提供临界区,因此其方法不执行任何操作。

CComMultiThreadModelCComSingleThreadModel 还包含 CriticalSection 的定义。 下表显示了线程模型类与 CriticalSection 引用的临界区类之间的关系:

类的定义位置 引用的类
CComMultiThreadModelNoCS CComFakeCriticalSection
CComMultiThreadModel CComCriticalSection
CComSingleThreadModel CComFakeCriticalSection

除了 CriticalSection 之外,还可以使用 typedef 名称 AutoCriticalSection。 如果要消除 CRT 启动代码,则不应在全局对象或静态类成员中指定 AutoCriticalSection

示例

请参阅 CComMultiThreadModel::AutoCriticalSection

CComMultiThreadModelNoCS::Decrement

此静态函数调用 Win32 函数 InterlockedDecrement,该函数将 p 指向的变量的值递减。

static ULONG WINAPI Decrement(LPLONG p) throw();

参数

p
[in] 指向要递减的变量的指针。

返回值

如果递减的结果为 0,则 Decrement 返回 0。 如果递减的结果为非零,则返回值也为非零,但可能不等于递减的结果。

备注

InterlockedDecrement 可防止多个线程同时使用此变量。

CComMultiThreadModelNoCS::Increment

此静态函数调用 Win32 函数 InterlockedIncrement,该函数将 p 指向的变量的值递减。

static ULONG WINAPI Increment(LPLONG p) throw();

参数

p
[in] 指向要递增的变量的指针。

返回值

如果增量的结果为 0,则 Increment 返回 0。 如果递增的结果为非零,则返回值也为非零,但可能不等于递增的结果。

备注

InterlockedIncrement 可防止多个线程同时使用此变量。

CComMultiThreadModelNoCS::ThreadModelNoCS

使用 CComMultiThreadModelNoCS 时,typedef 名称 ThreadModelNoCS 只是引用 CComMultiThreadModelNoCS

typedef CComMultiThreadModelNoCS ThreadModelNoCS;

注解

CComMultiThreadModelCComSingleThreadModel 还包含 ThreadModelNoCS 的定义。 下表显示了线程模型类与 ThreadModelNoCS 引用的类之间的关系:

类的定义位置 引用的类
CComMultiThreadModelNoCS CComMultiThreadModelNoCS
CComMultiThreadModel CComMultiThreadModelNoCS
CComSingleThreadModel CComSingleThreadModel

请注意,CComMultiThreadModelNoCSThreadModelNoCS 的定义提供了与 CComMultiThreadModelCComSingleThreadModel 的对称性。 例如,假设 CComMultiThreadModel::AutoCriticalSection 中的示例代码声明了以下 typedef

typedef typename ThreadModel::ThreadModelNoCS _ThreadModel;

无论为 ThreadModel 指定的类(例如 CComMultiThreadModelNoCS)如何,_ThreadModel 都会相应地解析。

示例

请参阅 CComMultiThreadModel::AutoCriticalSection

另请参阅

类概述