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.
Mewakili "bagian penting" — objek sinkronisasi yang memungkinkan satu utas pada satu waktu untuk mengakses sumber daya atau bagian kode.
Sintaks
class CCriticalSection : public CSyncObject
Anggota
Konstruktor Publik
| Nama | Deskripsi |
|---|---|
CCriticalSection::CCriticalSection |
Membuat CCriticalSection objek. |
Metode Publik
| Nama | Deskripsi |
|---|---|
CCriticalSection::Lock |
Gunakan untuk mendapatkan akses ke CCriticalSection objek. |
CCriticalSection::Unlock |
CCriticalSection Melepaskan objek. |
Operator Publik
| Nama | Deskripsi |
|---|---|
CCriticalSection::operator CRITICAL_SECTION* |
Mengambil penunjuk ke objek internal CRITICAL_SECTION . |
Anggota Data Publik
| Nama | Deskripsi |
|---|---|
CCriticalSection::m_sect |
Objek CRITICAL_SECTION. |
Keterangan
Bagian penting 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 CCriticalSection objek untuk mengontrol daftar tertaut, hanya satu utas pada satu waktu yang bisa mendapatkan akses ke daftar.
Catatan
Fungsionalitas CCriticalSection kelas disediakan oleh objek Win32 CRITICAL_SECTION yang sebenarnya.
Bagian penting digunakan alih-alih mutex (lihat CMutex) ketika kecepatan sangat penting dan sumber daya tidak akan digunakan di seluruh batas proses.
Ada dua metode untuk menggunakan CCriticalSection objek: berdiri sendiri dan disematkan di kelas.
Metode berdiri sendiri Untuk menggunakan objek yang berdiri sendiri
CCriticalSection, buatCCriticalSectionobjek saat diperlukan. Setelah berhasil mengembalikan dari konstruktor, secara eksplisit mengunci objek dengan panggilan keLock. HubungiUnlocksaat Anda selesai mengakses bagian penting. Metode ini, sementara lebih jelas bagi seseorang yang membaca kode sumber Anda, lebih rentan terhadap kesalahan karena Anda harus ingat untuk mengunci dan membuka kunci bagian penting sebelum dan sesudah akses.Metode yang lebih disukai adalah menggunakan
CSingleLockkelas . Ini juga memilikiLockmetode danUnlock, tetapi Anda tidak perlu khawatir tentang membuka kunci sumber daya jika terjadi pengecualian.Metode tersemat Anda juga dapat berbagi kelas dengan beberapa utas dengan menambahkan
CCriticalSectionanggota data jenis ke kelas dan mengunci anggota data saat diperlukan.
Untuk informasi selengkapnya tentang menggunakan CCriticalSection objek, lihat artikel Multithreading: Cara Menggunakan Kelas Sinkronisasi.
Hierarki Warisan
CCriticalSection
Persyaratan
Header: afxmt.h
CCriticalSection::CCriticalSection
Membuat CCriticalSection objek.
CCriticalSection();
Keterangan
Untuk mengakses atau merilis CCriticalSection objek, buat CSingleLock objek dan panggil fungsi dan Unlock anggotanyaLock. CCriticalSection Jika objek digunakan berdiri sendiri, panggil fungsi anggotanya Unlock untuk merilisnya.
Jika konstruktor gagal mengalokasikan memori sistem yang diperlukan, pengecualian memori (jenis CMemoryException) secara otomatis dilemparkan.
Contoh
Lihat contoh untuk CCriticalSection::Lock.
CCriticalSection::Lock
Panggil fungsi anggota ini untuk mendapatkan akses ke objek bagian penting.
BOOL Lock();
BOOL Lock(DWORD dwTimeout);
Parameter
dwTimeoutLock mengabaikan nilai parameter ini.
Tampilkan Nilai
Bukan nol jika fungsi berhasil; jika tidak, 0.
Keterangan
Lock adalah panggilan pemblokiran yang tidak akan kembali sampai objek bagian penting disinyalir (tersedia).
Jika waktu tunggu diperlukan, Anda dapat menggunakan CMutex objek alih-alih CCriticalSection objek.
Jika Lock gagal mengalokasikan memori sistem yang diperlukan, pengecualian memori (jenis CMemoryException) secara otomatis dilemparkan.
Contoh
Contoh ini menunjukkan pendekatan bagian penting berlapis dengan mengontrol akses ke sumber daya bersama (objek statis _strShared ) menggunakan objek bersama CCriticalSection . Fungsi ini SomeMethod menunjukkan pembaruan sumber daya bersama dengan cara yang aman.
//Definition of critical section class
class CMyCritSectClass
{
static CString _strShared; //shared resource
static CCriticalSection _critSect;
public:
CMyCritSectClass(void) {}
~CMyCritSectClass(void) {}
void SomeMethod(void); //locks, modifies, and unlocks shared resource
};
//Declaration of static members and SomeMethod
CString CMyCritSectClass::_strShared;
CCriticalSection CMyCritSectClass::_critSect;
void CMyCritSectClass::SomeMethod()
{
_critSect.Lock();
if (_strShared == "")
_strShared = "<text>";
_critSect.Unlock();
}
CCriticalSection::m_sect
Berisi objek bagian penting yang digunakan oleh semua CCriticalSection metode.
CRITICAL_SECTION m_sect;
CCriticalSection::operator CRITICAL_SECTION*
Mengambil CRITICAL_SECTION objek.
operator CRITICAL_SECTION*();
Keterangan
Panggil fungsi ini untuk mengambil penunjuk ke objek internal CRITICAL_SECTION .
CCriticalSection::Unlock
Merilis objek untuk digunakan oleh utas CCriticalSection lain.
BOOL Unlock();
Tampilkan Nilai
Bukan nol jika CCriticalSection objek dimiliki oleh utas dan rilis berhasil; jika tidak, 0.
Keterangan
CCriticalSection Jika sedang digunakan sendiri, Unlock harus dipanggil segera setelah menyelesaikan penggunaan sumber daya yang dikontrol oleh bagian penting. CSingleLock Jika objek sedang digunakan, CCriticalSection::Unlock akan dipanggil oleh fungsi anggota objek Unlock kunci.
Contoh
Lihat contoh untuk CCriticalSection::Lock.