內嵌式連結清單
(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 | 擷取指定之連結清單中的專案數目。 |