互锁的 Singly 链接列表
互锁的单锁链接列表(SList)简化了从链接列表中插入和删除的任务。 SList 是使用非阻止算法实现的,可提供原子同步、提高系统性能,并避免诸如优先级反转和锁定护航等问题。
SList 在 32 位代码中实现和使用非常简单。 但是,很难在 64 位代码中实现它们,因为本机互锁交换基元可交换的数据量不是地址大小的两倍,因为它位于 32 位代码中。 因此,SLists 支持将高端可缩放算法移植到 Windows。
Windows 8: 从 Windows 8 开始,相应的本机互锁交换基元可用于 64 位代码,例如 InterlockedCompare64Exchange128。
应用程序可以通过调用 InitializeSListHead 函数来使用 SLists 初始化列表的头。 若要在列表中插入项,请使用 InterlockedPushEntrySList 函数。 若要从列表中删除项,请使用 InterlockedPopEntrySList 函数。
所有列表项都必须在 MEMORY_ALLOCATION_ALIGNMENT 边界上对齐。 未对齐的项可能会导致不可预知的结果。 请参阅 _aligned_malloc。
有关示例,请参阅 使用 Singly 链接列表。
下表列出了 SList 函数。
功能 | 描述 |
---|---|
InitializeSListHead | 初始化单向链接列表的头。 |
InterlockedFlushSList | 刷新单向链接列表中的项目的完整列表。 |
InterlockedPopEntrySList | 从单项链接列表的前面删除项。 |
InterlockedPushEntrySList | 在单向链接列表的前面插入项。 |
InterlockedPushListSList | 在另一个单向链接列表的前面插入一个单一链接的列表。 |
InterlockedPushListSListEx | 在另一个单向链接列表的前面插入一个单一链接的列表。 此版本的方法不使用 __fastcall 调用约定。 |
RtlFirstEntrySList | 检索单向链接列表中的第一个条目。 |
QueryDepthSList | 检索指定单项链接列表中的条目数。 |