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 | 擷取指定之單項連結清單中的項目數。 |