CSingleLock
Kelas
Mewakili mekanisme kontrol akses yang digunakan dalam mengontrol akses ke sumber daya dalam program multithreaded.
Sintaks
class CSingleLock
Anggota
Konstruktor Publik
Nama | Deskripsi |
---|---|
CSingleLock::CSingleLock |
Membuat CSingleLock objek. |
Metode Publik
Nama | Deskripsi |
---|---|
CSingleLock::IsLocked |
Menentukan apakah objek dikunci. |
CSingleLock::Lock |
Menunggu objek sinkronisasi. |
CSingleLock::Unlock |
Merilis objek sinkronisasi. |
Keterangan
CSingleLock
tidak memiliki kelas dasar.
Untuk menggunakan kelas CSemaphore
sinkronisasi , , CMutex
, CCriticalSection
dan CEvent
, Anda harus membuat CSingleLock
objek atau CMultiLock
untuk menunggu dan merilis objek sinkronisasi. Gunakan CSingleLock
saat Anda hanya perlu menunggu pada satu objek pada satu waktu. Gunakan CMultiLock
ketika ada beberapa objek yang dapat Anda gunakan pada waktu tertentu.
Untuk menggunakan CSingleLock
objek, panggil konstruktornya di dalam fungsi anggota di kelas sumber daya terkontrol. Kemudian panggil IsLocked
fungsi anggota untuk menentukan apakah sumber daya tersedia. Jika ya, lanjutkan dengan sisa fungsi anggota. Jika sumber daya tidak tersedia, tunggu hingga jumlah waktu tertentu untuk sumber daya dirilis, atau kembalikan kegagalan. Setelah penggunaan sumber daya selesai, panggil Unlock
fungsi jika CSingleLock
objek akan digunakan lagi, atau izinkan CSingleLock
objek dihancurkan.
CSingleLock
objek memerlukan keberadaan objek yang berasal dari CSyncObject
. Ini biasanya merupakan anggota data dari kelas sumber daya yang dikontrol. Untuk informasi selengkapnya tentang cara menggunakan CSingleLock
objek, lihat artikel Multithreading: Cara Menggunakan Kelas Sinkronisasi.
Hierarki Warisan
CSingleLock
Persyaratan
Header: afxmt.h
CSingleLock::CSingleLock
Membuat CSingleLock
objek.
explicit CSingleLock(
CSyncObject* pObject,
BOOL bInitialLock = FALSE);
Parameter
pObject
Arahkan ke objek sinkronisasi yang akan diakses. Tidak boleh NULL
.
bInitialLock
Menentukan apakah awalnya mencoba mengakses objek yang disediakan.
Keterangan
Fungsi ini umumnya dipanggil dari dalam fungsi anggota akses dari sumber daya yang dikontrol.
Contoh
// m_CritSection is a data member (of type CCriticalSection)
// of an existing class that implements the resource being shared.
// Relate the synchronization object (m_CritSection) with
// our CSingleLock object.
CSingleLock singleLock(&m_CritSection);
singleLock.Lock(); // Attempt to lock the shared resource
if (singleLock.IsLocked()) // Resource has been locked
{
//...use the shared resource...
// Now that we are finished,
// unlock the resource for others.
singleLock.Unlock();
}
CSingleLock::IsLocked
Menentukan apakah objek yang terkait dengan CSingleLock
objek tidak ditandatangani (tidak tersedia).
BOOL IsLocked();
Tampilkan Nilai
Bukan nol jika objek dikunci; jika tidak, 0.
Contoh
// m_Mutex is a data member (of type CMutex)
// of an existing class that implements the resource being shared.
// Relate the synchronization object (m_Mutex) with
// our CSingleLock object.
CSingleLock singleLock(&m_Mutex);
// Attempt to lock the shared resource
singleLock.Lock(100); // Wait 100 ms...
// Has the resource been successfully locked?
if (singleLock.IsLocked())
{
// We were able to lock the resource;
// we may now work with the data associated with the mutex...
// Now that we are finished, unlock the resource for others.
singleLock.Unlock();
}
CSingleLock::Lock
Panggil fungsi ini untuk mendapatkan akses ke sumber daya yang dikontrol oleh objek sinkronisasi yang disediakan ke CSingleLock
konstruktor.
BOOL Lock(DWORD dwTimeOut = INFINITE);
Parameter
dwTimeOut
Menentukan jumlah waktu untuk menunggu objek sinkronisasi tersedia (diberi sinyal). Jika INFINITE
, Lock
akan menunggu sampai objek diberi sinyal sebelum kembali.
Tampilkan Nilai
Bukan nol jika fungsi berhasil; jika tidak, 0.
Keterangan
Jika objek sinkronisasi diberi sinyal, Lock
akan berhasil dikembalikan dan utas sekarang memiliki objek. Jika objek sinkronisasi tidak ditandatangani (tidak tersedia), Lock
akan menunggu objek sinkronisasi menjadi sinyal hingga jumlah milidetik yang ditentukan dalam dwTimeOut
parameter. Jika objek sinkronisasi tidak menjadi sinyal dalam jumlah waktu yang ditentukan, Lock
mengembalikan kegagalan.
Contoh
// m_Mutex is a data member (of type CMutex)
// of an existing class that implements the resource being shared.
// Relate the synchronization object (m_Mutex) with
// our CSingleLock object.
CSingleLock singleLock(&m_Mutex);
// Attempt to lock the shared resource
if (singleLock.Lock(100)) // Wait 100 ms...
{
// We were able to lock the resource;
// we may now work with the data associated with the mutex...
// Now that we are finished, unlock the resource for others.
singleLock.Unlock();
}
CSingleLock::Unlock
Merilis objek sinkronisasi yang dimiliki oleh CSingleLock
.
BOOL Unlock();
BOOL Unlock(
LONG lCount,
LPLONG lPrevCount = NULL);
Parameter
lCount
Jumlah akses ke rilis. Harus lebih besar dari 0. Jika jumlah yang ditentukan akan menyebabkan jumlah objek melebihi maksimumnya, jumlahnya tidak diubah dan fungsi mengembalikan FALSE
.
lPrevCount
Arahkan ke variabel untuk menerima jumlah objek sinkronisasi sebelumnya. Jika NULL
, jumlah sebelumnya tidak dikembalikan.
Tampilkan Nilai
Bukan nol jika fungsi berhasil; jika tidak, 0.
Keterangan
Fungsi ini dipanggil oleh CSingleLock
destruktor.
Jika Anda perlu merilis lebih dari satu jumlah akses semaphore, gunakan bentuk Unlock
kedua dan tentukan jumlah akses yang akan dirilis.
Contoh
// m_Mutex is a data member (of type CMutex)
// of an existing class that implements the resource being shared.
// Relate the synchronization object (m_Mutex) with
// our CSingleLock object.
CSingleLock singleLock(&m_Mutex);
// Attempt to lock the shared resource
if (singleLock.Lock(100)) // Wait 100 ms...
{
// We were able to lock the resource;
// we may now work with the data associated with the mutex...
// Now that we are finished, unlock the resource for others.
singleLock.Unlock();
}