互锁单一链接列表

(SList) 联锁单一链接列表 简化了从链接列表插入和删除的任务。 SList 是使用非阻止算法实现的,可提供原子同步、提高系统性能,并避免优先级反转和锁护送等问题。

SList 易于在 32 位代码中实现和使用。 但是,在 64 位代码中实现它们很困难,因为本机互锁交换基元可交换的数据量不是地址大小的两倍,因为它在 32 位代码中。 因此,SLists 支持将高端可缩放算法移植到 Windows。

Windows 8:从Windows 8开始,相应的本机互锁交换基元可用于 64 位代码,例如 InterlockedCompare64Exchange128

应用程序可以通过调用 InitializeSListHead 函数来初始化列表的头来使用 SList。 若要将项插入列表,请使用 InterlockedPushEntrySList 函数。 若要从列表中删除项,请使用 InterlockedPopEntrySList 函数。

所有列表项都必须在 MEMORY_ALLOCATION_ALIGNMENT 边界上对齐。 未对齐的项可能会导致不可预知的结果。 请参阅 _aligned_malloc

有关示例,请参阅 使用单一链接列表

下表列出了 SList 函数。

函数 说明
InitializeSListHead 初始化单独链接列表的标题。
InterlockedFlushSList 刷新单独链接列表中的整个项目列表。
InterlockedPopEntrySList 从单独链接列表的前面删除项。
InterlockedPushEntrySList 在单独链接列表的前面插入一个项目。
InterlockedPushListSList 在另一个单独链接列表的前面插入一个单独链接列表。
InterlockedPushListSListEx 在另一个单独链接列表的前面插入一个单独链接列表。 此方法的此版本不使用 __fastcall 调用约定。
RtlFirstEntrySList 检索单独链接列表中的第一个条目。
QueryDepthSList 检索指定的单独链接列表中的条目数。