Bagikan melalui


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 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();
}

Lihat juga

Bagan Hierarki
CMultiLock Kelas