共用方式為


Interlocked Singly 連結清單

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

SList 可直接在32位程式代碼中實作和使用。 不過,在64位程式代碼中實作它們是一項挑戰,因為原生聯結交換基本類型可交換的數據量不會是位址大小的兩倍,因為它位於32位程式代碼中。 因此,SLists 會啟用將高端可擴充演算法移植到 Windows。

Windows 8: 從 Windows 8 開始,適當的原生交換基本類型適用於 64 位程式代碼,例如 InterlockedCompare64Exchange128

應用程式可以使用 SLists,方法是呼叫 InitializeSListHead 函式來初始化清單的前端。 若要將專案插入清單中,請使用 InterlockedPushEntrySList 函式。 若要從清單中刪除專案,請使用 InterlockedPopEntrySList 函式。

所有清單項目都必須對齊 MEMORY_ALLOCATION_ALIGNMENT 界限。 未對齊的專案可能會導致無法預期的結果。 請參閱 _aligned_malloc

如需範例,請參閱 使用 Singly 連結清單

下表列出 SList 函式。

功能 描述
InitializeSListHead 初始化單向連結清單的前端。
InterlockedFlushSList 排清單選連結清單中的整個項目清單。
InterlockedPopEntrySList 從單向連結清單的前面移除專案。
InterlockedPushEntrySList 在單向連結清單的前面插入專案。
InterlockedPushListSList 在另一個單向連結清單的前面插入單一連結清單。
InterlockedPushListSListEx 在另一個單向連結清單的前面插入單一連結清單。 這個版本的方法不會使用 __fastcall 呼叫慣例。
RtlFirstEntrySList 擷取單向連結清單中的第一個專案。
QueryDepthSList 擷取指定之單項連結清單中的項目數。