Kelas CMutex
Mewakili "mutex" — objek sinkronisasi yang memungkinkan satu utas memiliki akses yang saling eksklusif ke sumber daya.
Sintaks
class CMutex : public CSyncObject
Anggota
Konstruktor Publik
Nama | Deskripsi |
---|---|
CMutex::CMutex | Membuat CMutex objek. |
Keterangan
Mutex berguna ketika hanya satu utas pada satu waktu yang dapat diizinkan untuk memodifikasi data atau beberapa sumber daya terkontrol lainnya. Misalnya, menambahkan simpul ke daftar tertaut adalah proses yang seharusnya hanya diizinkan oleh satu utas pada satu waktu. Dengan menggunakan CMutex
objek untuk mengontrol daftar tertaut, hanya satu utas pada satu waktu yang bisa mendapatkan akses ke daftar.
Untuk menggunakan CMutex
objek, buat CMutex
objek saat diperlukan. Tentukan nama mutex yang ingin Anda tunggu, dan aplikasi Anda awalnya harus memilikinya. Anda kemudian dapat mengakses mutex saat konstruktor kembali. Panggil CSyncObject::Buka kunci setelah Anda selesai mengakses sumber daya yang dikontrol.
Metode alternatif untuk menggunakan CMutex
objek adalah menambahkan variabel jenis CMutex
sebagai anggota data ke kelas yang ingin Anda kontrol. Selama konstruksi objek terkontrol, panggil konstruktor CMutex
anggota data yang menentukan apakah mutex awalnya dimiliki, nama mutex (jika akan digunakan di seluruh batas proses), dan atribut keamanan yang diinginkan.
Untuk mengakses sumber daya yang dikontrol oleh objek dengan CMutex
cara ini, pertama-tama buat variabel jenis CSingleLock atau ketik CMultiLock di fungsi anggota akses sumber daya Anda. Kemudian panggil fungsi anggota objek Lock
kunci (misalnya, CSingleLock::Lock). Pada titik ini, utas Anda akan mendapatkan akses ke sumber daya, menunggu sumber daya dirilis dan mendapatkan akses, atau menunggu sumber daya dirilis dan kehabisan waktu, gagal mendapatkan akses ke sumber daya. Bagaimanapun, sumber daya Anda telah diakses dengan cara yang aman utas. Untuk melepaskan sumber daya, gunakan fungsi anggota objek Unlock
kunci (misalnya, CSingleLock::Unlock), atau izinkan objek kunci jatuh dari cakupan.
Untuk informasi selengkapnya tentang menggunakan CMutex
objek, lihat artikel Multithreading: Cara Menggunakan Kelas Sinkronisasi.
Hierarki Warisan
CMutex
Persyaratan
Header: afxmt.h
CMutex::CMutex
Membuat objek bernama atau tidak bernama CMutex
.
CMutex(
BOOL bInitiallyOwn = FALSE,
LPCTSTR lpszName = NULL,
LPSECURITY_ATTRIBUTES lpsaAttribute = NULL);
Parameter
bInitiallyOwn
Menentukan apakah utas yang CMutex
membuat objek awalnya memiliki akses ke sumber daya yang dikontrol oleh mutex.
lpszName
CMutex
Nama objek. Jika ada mutex lain dengan nama yang sama, lpszName harus disediakan jika objek akan digunakan di seluruh batas proses. Jika NULL, mutex akan tidak diberi nama. Jika nama cocok dengan mutex yang ada, konstruktor membangun objek baru CMutex
yang mereferensikan mutex nama tersebut. Jika nama cocok dengan objek sinkronisasi yang ada yang bukan mutex, konstruksi akan gagal.
lpsaAttribute
Atribut keamanan untuk objek mutex. Untuk deskripsi lengkap tentang struktur ini, lihat SECURITY_ATTRIBUTES di Windows SDK.
Keterangan
Untuk mengakses atau melepaskan CMutex
objek, buat objek CMultiLock atau CSingleLock dan panggil fungsi anggota Lock and Unlock-nya. CMutex
Jika objek digunakan berdiri sendiri, panggil fungsi anggotanya Unlock
untuk merilisnya.
Penting
Setelah membuat CMutex
objek, gunakan GetLastError untuk memastikan bahwa mutex belum ada. Jika mutex memang ada secara tiba-tiba, itu mungkin menunjukkan proses nakal berjongkok dan mungkin berniat menggunakan mutex dengan berbahaya. Dalam hal ini, prosedur sadar keamanan yang direkomendasikan adalah menutup handel dan melanjutkan seolah-olah ada kegagalan dalam membuat objek.