Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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:
- input dan output yang saling tumpang tindih
- panggilan prosedur asinkron
- objek bagian penting
- variabel kondisi
- kunci pembaca/penulis tipis
- inisialisasi satu kali
- akses variabel yang terkait
- daftar yang ditautkan secara senyap
- antrean timer
- makro MemoryBarrier
Untuk informasi tambahan tentang sinkronisasi, lihat Masalah Sinkronisasi dan Multiprosesor .