Bagikan melalui


Daftar Tertaut Senyap Yang Saling Ditautkan

Daftar tertaut senyap (SList) yang saling ditautkan memudahkan tugas penyisipan dan penghapusan dari daftar tertaut. SList diimplementasikan menggunakan algoritma nonblocking untuk memberikan sinkronisasi atomik, meningkatkan performa sistem, dan menghindari masalah seperti inversi prioritas dan konvoi penguncian.

SList mudah diimplementasikan dan digunakan dalam kode 32-bit. Namun, sulit untuk mengimplementasikannya dalam kode 64-bit karena jumlah data yang dapat dipertukarkan oleh primitif pertukaran interlock asli tidak menggandakan ukuran alamat, karena dalam kode 32-bit. Oleh karena itu, SList memungkinkan porting algoritma yang dapat diskalakan kelas atas ke Windows.

Windows 8: Mulai dari Windows 8 primitif pertukaran interlock asli yang sesuai tersedia untuk kode 64-bit, misalnya InterlockedCompare64Exchange128.

Aplikasi dapat menggunakan SList dengan memanggil fungsi InitializeSListHead untuk menginisialisasi kepala daftar. Untuk menyisipkan item ke dalam daftar, gunakan fungsi InterlockedPushEntrySList . Untuk menghapus item dari daftar, gunakan fungsi InterlockedPopEntrySList .

Semua item daftar harus diratakan pada batas MEMORY_ALLOCATION_ALIGNMENT . Item yang tidak ditandatangani dapat menyebabkan hasil yang tidak dapat diprediksi. Lihat _aligned_malloc.

Misalnya, lihat Menggunakan Daftar Yang Ditautkan Dengan Senyap.

Tabel berikut mencantumkan fungsi SList.

Fungsi Deskripsi
InitializeSListHead Menginisialisasi kepala daftar yang ditautkan secara senyap.
InterlockedFlushSList Menghapus seluruh daftar item dalam daftar yang ditautkan secara senyap.
InterlockedPopEntrySList Menghapus item dari depan daftar yang ditautkan dengan nyanyian.
InterlockedPushEntrySList Menyisipkan item di bagian depan daftar yang ditautkan secara senyap.
InterlockedPushListSList Menyisipkan daftar yang ditautkan dengan nyanyian di bagian depan daftar lain yang ditautkan dengan nyanyian.
InterlockedPushListSListEx Menyisipkan daftar yang ditautkan dengan nyanyian di bagian depan daftar lain yang ditautkan dengan nyanyian. Versi metode ini tidak menggunakan konvensi panggilan __fastcall .
RtlFirstEntrySList Mengambil entri pertama dalam daftar yang ditautkan secara senyap.
QueryDepthSList Mengambil jumlah entri dalam daftar yang ditautkan secara senyap yang ditentukan.