Bagikan melalui


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

CObject

CSyncObject

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.

Lihat juga

Kelas CSyncObject
Bagan Hierarki