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

Objek Bagian Kritis

InitializeCriticalSection

InitializeCriticalSectionAndSpinCount

WaitForSingleObject

Fungsi Sinkronisasi

Api Vertdll tersedia di enklave VBS