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 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 CSemaphoresinkronisasi , , CMutex, CCriticalSectiondan 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 CSingleLockdestruktor.
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();
}