Bagikan melalui


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

Lihat juga

DeleteSynchronizationBarrier

InitializeSynchronizationBarrier

Penghalang Sinkronisasi

Api Vertdll tersedia di enklave VBS