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.

Penghalang sinkronisasi berguna untuk komputasi bertahap, di mana utas yang menjalankan kode yang sama secara paralel semuanya 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 pembatas. Setelah setiap utas menyelesaikan pekerjaannya, alur memanggil EnterSynchronizationBarrier untuk menunggu di penghubung. Fungsi EnterSynchronizationBarrier memblokir setiap utas hingga jumlah utas yang diblokir di penghalang mencapai jumlah utas maksimum untuk penghalang, di mana EnterSynchronizationBarrier membuka blokir semua utas. Fungsi EnterSynchronizationBarrier mengembalikan TRUE untuk tepat salah satu utas yang memasuki pembatas, dan mengembalikan FALSE untuk semua utas lainnya.

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

Jika pembatas sinkronisasi tidak akan pernah dihapus, utas dapat menentukan bendera SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE saat memasuki pembatas. 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.