Bagikan melalui


Penghalang Sinkronisasi

Hambatan sinkronisasi memungkinkan beberapa utas menunggu hingga semua utas mencapai titik eksekusi tertentu sebelum utas berlanjut. Hambatan sinkronisasi tidak dapat dibagikan di seluruh proses.

Hambatan sinkronisasi berguna untuk komputasi bertahap, di mana utas yang menjalankan kode yang sama secara paralel harus menyelesaikan satu fase sebelum melanjutkan ke fase berikutnya.

Untuk membuat penghalang sinkronisasi, panggil fungsi InitializeSynchronizationBarrier dan tentukan jumlah maksimum utas dan berapa kali utas harus berputar sebelum diblokir. Kemudian luncurkan utas yang akan menggunakan hambatan. Setelah setiap utas menyelesaikan pekerjaannya, alur memanggil EnterSynchronizationBarrier untuk menunggu di penghalang. Fungsi EnterSynchronizationBarrier memblokir setiap utas hingga jumlah utas yang diblokir dalam penghalang mencapai jumlah utas maksimum untuk penghalang, di mana titik EnterSynchronizationBarrier membuka blokir semua utas. Fungsi EnterSynchronizationBarrier mengembalikan TRUE untuk salah satu utas yang memasuki penghalang, dan mengembalikan FALSE untuk semua utas lainnya.

Untuk merilis hambatan sinkronisasi saat tidak lagi diperlukan, panggil DeleteSynchronizationBarrier. Sangat aman untuk memanggil fungsi ini segera setelah memanggil EnterSynchronizationBarrier karena fungsi tersebut memastikan bahwa semua utas telah selesai menggunakan hambatan sebelum dirilis.

Jika hambatan sinkronisasi tidak akan pernah dihapus, utas dapat menentukan bendera SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE saat memasuki penghalang. Semua utas yang menggunakan pembatas harus menentukan bendera ini; jika ada utas yang tidak, bendera diabaikan. Bendera ini menyebabkan fungsi melewati pekerjaan tambahan yang diperlukan untuk keamanan penghapusan, yang dapat meningkatkan performa. Perhatikan bahwa menghapus penghalang saat bendera ini berlaku dapat mengakibatkan akses handel yang tidak valid dan satu atau beberapa utas yang diblokir secara permanen.