內嵌式連結清單

(SList 的 內嵌式連結清單) 可簡化從連結清單中插入和刪除的工作。 SList 是使用非封鎖演算法來實作,以提供不可部分完成的同步處理、增加系統效能,並避免優先順序反轉和鎖定護送等問題。

SList 可直接在 32 位程式碼中實作和使用。 不過,在 64 位程式碼中實作它們很困難,因為原生交集交換基本類型可交換的資料量不是位址大小的倍數,因為它在 32 位程式碼中。 因此,SList 會啟用將高階可調整演算法移植到 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 擷取指定之連結清單中的專案數目。