Fungsi SetCriticalSectionSpinCount (synchapi.h)
Mengatur jumlah putaran untuk bagian penting yang ditentukan. Berputar berarti bahwa ketika utas mencoba memperoleh bagian penting yang terkunci, utas memasuki perulangan, memeriksa untuk melihat apakah kunci dilepaskan, dan jika kunci tidak dilepaskan, utas akan tidur.
Sintaks
DWORD SetCriticalSectionSpinCount(
[in, out] LPCRITICAL_SECTION lpCriticalSection,
[in] DWORD dwSpinCount
);
Parameter
[in, out] lpCriticalSection
Penunjuk ke objek bagian penting.
[in] dwSpinCount
Jumlah putaran untuk objek bagian kritis. Pada sistem prosesor tunggal, jumlah putaran diabaikan dan jumlah putar bagian kritis diatur ke nol (0). Pada sistem multiprosesor, jika bagian penting tidak tersedia, utas panggilan memutar waktu dwSpinCount sebelum melakukan operasi tunggu pada semaphore yang terkait dengan bagian penting. Jika bagian yang penting menjadi gratis selama operasi spin, utas panggilan menghindari operasi tunggu.
Nilai kembali
Fungsi mengembalikan jumlah putaran sebelumnya untuk bagian kritis.
Keterangan
Utas dari satu proses dapat menggunakan objek bagian penting untuk sinkronisasi pengecualian bersama. Proses ini bertanggung jawab untuk mengalokasikan memori yang digunakan oleh objek bagian penting, yang dapat dilakukannya dengan mendeklarasikan variabel jenis CRITICAL_SECTION. Sebelum menggunakan bagian penting, beberapa utas proses harus memanggil fungsi InitializeCriticalSection atau InitializeCriticalSectionAndSpinCount untuk menginisialisasi objek. Anda kemudian dapat memodifikasi jumlah putaran dengan memanggil fungsi SetCriticalSectionSpinCount .
Jumlah putaran berguna untuk bagian penting dari durasi pendek yang dapat mengalami tingkat pertikaian yang tinggi. Pertimbangkan skenario terburuk, di mana aplikasi pada sistem SMP memiliki dua atau tiga utas yang terus mengalokasikan dan melepaskan memori dari tumpukan. Aplikasi ini menserialisasikan timbunan dengan bagian penting. Dalam skenario terburuk, ketidakcocokan untuk bagian kritis bersifat konstan, dan setiap utas melakukan panggilan intensif pemrosesan ke fungsi WaitForSingleObject . Namun, jika jumlah putaran diatur dengan benar, utas panggilan tidak segera memanggil WaitForSingleObject ketika pertikaian terjadi. Sebaliknya, utas panggilan dapat memperoleh kepemilikan bagian penting jika dirilis selama operasi spin.
Anda dapat meningkatkan performa secara signifikan dengan memilih jumlah putaran kecil untuk bagian penting dalam durasi pendek. Manajer timbunan menggunakan jumlah putar sekitar 4000 untuk bagian kritis per tumpuknya. Ini memberikan performa dan skalabilitas yang hebat dalam hampir semua skenario terburuk.
Untuk mengkompilasi aplikasi yang menggunakan fungsi ini, tentukan _WIN32_WINNT sebagai 0x0403
atau yang lebih baru. Untuk informasi selengkapnya, lihat Menggunakan Header Windows.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows XP [aplikasi desktop | Aplikasi UWP] |
Server minimum yang didukung | Windows Server 2003 [aplikasi desktop | Aplikasi UWP] |
Target Platform | Windows |
Header | synchapi.h (termasuk Windows.h pada Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2) |
Pustaka | Kernel32.lib |
DLL | Kernel32.dll |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk