Fungsi EnterSynchronizationBarrier (synchapi.h)
Menyebabkan utas panggilan menunggu pada penghubung sinkronisasi hingga jumlah maksimum utas memasuki penghubung.
Sintaks
BOOL EnterSynchronizationBarrier(
[in, out] LPSYNCHRONIZATION_BARRIER lpBarrier,
[in] DWORD dwFlags
);
Parameter
[in, out] lpBarrier
Penunjuk ke penghubung sinkronisasi yang diinisialisasi. Gunakan fungsi InitializeSynchronizationBarrier untuk menginisialisasi penghubung. SYNCHRONIZATION_BARRIER adalah struktur buram yang tidak boleh dimodifikasi oleh aplikasi.
[in] dwFlags
Bendera yang mengontrol perilaku utas yang memasuki penghubung ini. Parameter ini bisa berupa satu atau beberapa nilai berikut:
Nilai | Makna |
---|---|
SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY | Menentukan bahwa utas yang memasuki penghalang harus segera diblokir sampai utas terakhir memasuki penghalang. Untuk informasi selengkapnya, lihat Keterangan. |
SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY | Menentukan bahwa utas yang memasuki pembatas harus berputar hingga utas terakhir memasuki penghalus, bahkan jika utas berputar melebihi jumlah putaran maksimum hambatan. Untuk informasi selengkapnya, lihat Keterangan. |
SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE | Menentukan bahwa fungsi dapat melewati pekerjaan yang diperlukan untuk memastikan bahwa aman untuk menghapus hambatan, yang dapat meningkatkan performa. Semua utas yang masuk ke pembatas ini harus menentukan bendera; jika tidak, bendera diabaikan. Bendera ini harus digunakan hanya jika pembatas tidak akan pernah dihapus. |
Nilai kembali
TRUE
untuk utas terakhir untuk memberi sinyal penghubung. Utas yang memberi sinyal penghubung sebelum utas terakhir memberi sinyal bahwa ia menerima nilai pengembalian .FALSE
Keterangan
Perilaku default untuk utas yang memasuki penghalang sinkronisasi adalah memutar hingga jumlah putaran maksimum penghalang tercapai, lalu memblokir. Ini memungkinkan utas untuk dilanjutkan dengan cepat jika utas terakhir memasuki hambatan dalam waktu yang relatif singkat. Namun, jika utas terakhir membutuhkan waktu yang relatif lebih lama untuk tiba, utas sudah berada di blok penghalang sehingga mereka berhenti mengonsumsi waktu prosesor saat menunggu.
Utas dapat menimpa perilaku default pembatas dengan menentukan SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY atau SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY. Namun, perlu diingat bahwa menggunakan bendera ini dapat memengaruhi performa. Memutar tanpa batas waktu membuat prosesor tidak melayani utas lain, sementara pemblokiran prematur menimbulkan overhead menukar utas dari prosesor, membangkitkan utas ketika membuka blokir, dan menukarnya kembali ke prosesor lagi. Secara umum lebih baik untuk memungkinkan hambatan untuk mengelola utas dan menggunakan bendera ini hanya jika pengujian performa menunjukkan aplikasi akan mendapat manfaat dari mereka.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 8 [khusus aplikasi desktop] |
Server minimum yang didukung | Windows Server 2012 [hanya aplikasi desktop] |
Target Platform | Windows |
Header | synchapi.h |
Pustaka | Kernel32.lib |
DLL | Kernel32.dll |