Tentang Sinkronisasi

Untuk menyinkronkan akses ke sumber daya, gunakan salah satu objek sinkronisasi di salah satu fungsi tunggu . Status objek sinkronisasi diberi sinyal atau yang tidak ditandatangani . Fungsi tunggu memungkinkan utas memblokir eksekusinya sendiri sampai objek tertentu yang belum disinyalir diatur ke keadaan tersinyalir. Untuk informasi selengkapnya, lihat Sinkronisasi Interproses.

Memilih primitif sinkronisasi yang tepat

Primitif Ruang lingkup Performance Reentrant Kapan digunakan
Kunci Pembaca/Penulis Langsing (SRW) Proses tunggal Cepat (biasanya mode user; dapat masuk ke mode kernel saat terjadi kontensi) No Pilihan default untuk beban kerja pembaca berat dalam kode modern. Penggunaan memori paling kecil (seukuran pointer).
Bagian Penting Proses tunggal Cepat (berputar kemudian kernel menunggu) Yes Gunakan saat Anda memerlukan penguncian reentrant/rekursif dalam satu proses. Sedikit lebih besar dari SRW.
Mutex Antarproses (bernama) Lebih lambat (selalu objek kernel) Yes Diperlukan untuk sinkronisasi antarproses melalui mutex bernama. Juga berguna jika digunakan dengan WaitForMultipleObjects.
Semaphore Antarproses (bernama) Objek kernel N/A Membatasi akses bersamaan ke kumpulan sumber daya (misalnya, kumpulan koneksi item N).
Acara Lintas-proses (bernama) Objek kernel N/A Pensinyalan antara utas/proses. Gunakan untuk pemberitahuan "sesuatu terjadi", bukan untuk melindungi data.
C++ std::mutex / std::shared_mutex Proses tunggal Definisi tergantung implementasi No Lebih disukai untuk kode C++ portabel dan RAII. Gunakan saat Anda tidak memerlukan API tunggu Win32 atau sinkronisasi lintas proses.

Note

Kunci SRW vs Bagian Penting: Untuk kode baru yang tidak memerlukan penguncian rekursif, pilih kunci SRW (AcquireSRWLockExclusive/AcquireSRWLockShared). Mereka lebih kecil, lebih cepat, dan mendukung semantik pembaca/penulis. Bagian penting masih sesuai ketika Anda memerlukan akuisisi masuk kembali (rekursif) dengan utas yang sama.

Important

Kesalahan umum: Menggunakan Mutex untuk sinkronisasi intra-proses saat Bagian Kritis atau kunci SRW sudah cukup. Mutex selalu melibatkan transisi mode kernel, membuatnya secara signifikan lebih lambat untuk operasi frekuensi tinggi dalam satu proses.

Berikut ini adalah mekanisme sinkronisasi lainnya:

Untuk informasi tambahan tentang sinkronisasi, lihat Masalah Sinkronisasi dan Multiprosesor .