Bagikan melalui


Kelas CMultiLock

Mewakili mekanisme kontrol akses yang digunakan dalam mengontrol akses ke sumber daya dalam program multithreaded.

Sintaks

class CMultiLock

Anggota

Konstruktor Publik

Nama Deskripsi
CMultiLock::CMultiLock Membuat CMultiLock objek.

Metode Publik

Nama Deskripsi
CMultiLock::IsLocked Menentukan apakah objek sinkronisasi tertentu dalam array dikunci.
CMultiLock::Lock Menunggu array objek sinkronisasi.
CMultiLock::Buka kunci Merilis objek sinkronisasi yang dimiliki.

Keterangan

CMultiLock tidak memiliki kelas dasar.

Untuk menggunakan kelas sinkronisasi CSemaphore, CMutex, dan CEvent, Anda dapat membuat CMultiLock objek atau CSingleLock untuk menunggu dan merilis objek sinkronisasi. Gunakan CMultiLock ketika ada beberapa objek yang dapat Anda gunakan pada waktu tertentu. Gunakan CSingleLock saat Anda hanya perlu menunggu pada satu objek pada satu waktu.

Untuk menggunakan CMultiLock objek, pertama-tama buat array objek sinkronisasi yang ingin Anda tunggu. Selanjutnya, panggil CMultiLock konstruktor objek di dalam fungsi anggota di kelas sumber daya terkontrol. Kemudian panggil fungsi Kunci anggota untuk menentukan apakah sumber daya tersedia (disinyalir). Jika salah satunya adalah, lanjutkan dengan sisa fungsi anggota. Jika tidak ada sumber daya yang tersedia, tunggu hingga jumlah waktu tertentu untuk sumber daya dirilis, atau kembalikan kegagalan. Setelah penggunaan sumber daya selesai, panggil fungsi Buka kunci jika CMultiLock objek akan digunakan lagi, atau izinkan CMultiLock objek dihancurkan.

CMultiLock objek paling berguna ketika utas memiliki sejumlah CEvent besar objek yang dapat ditanggapinya. Buat array yang berisi semua CEvent pointer, dan panggil Lock. Ini akan menyebabkan utas menunggu sampai salah satu peristiwa disinyalir.

Untuk informasi selengkapnya tentang cara menggunakan CMultiLock objek, lihat artikel Multithreading: Cara Menggunakan Kelas Sinkronisasi.

Hierarki Warisan

CMultiLock

Persyaratan

Header: afxmt.h

CMultiLock::CMultiLock

Membuat CMultiLock objek.

CMultiLock(
    CSyncObject* ppObjects [ ],
    DWORD dwCount,
    BOOL bInitialLock = FALSE);

Parameter

ppObjects
Array pointer ke objek sinkronisasi yang akan ditunggu. Tidak boleh NULL.

dwCount
Jumlah objek dalam ppObjects. Harus lebih besar dari 0.

bInitialLock
Menentukan apakah awalnya mencoba mengakses salah satu objek yang disediakan.

Keterangan

Fungsi ini dipanggil setelah membuat array objek sinkronisasi yang akan ditunggu. Biasanya dipanggil dari dalam utas yang harus menunggu salah satu objek sinkronisasi tersedia.

CMultiLock::IsLocked

Menentukan apakah objek yang ditentukan tidak ditandatangani (tidak tersedia).

BOOL IsLocked(DWORD dwItem);

Parameter

dwItem
Indeks dalam array objek yang sesuai dengan objek yang statusnya sedang dikueri.

Tampilkan Nilai

Bukan nol jika objek yang ditentukan dikunci; jika tidak, 0.

CMultiLock::Lock

Panggil fungsi ini untuk mendapatkan akses ke satu atau beberapa sumber daya yang dikontrol oleh objek sinkronisasi yang disediakan ke CMultiLock konstruktor.

DWORD Lock(
    DWORD dwTimeOut = INFINITE,
    BOOL bWaitForAll = TRUE,
    DWORD dwWakeMask = 0);

Parameter

dwTimeOut
Menentukan jumlah waktu untuk menunggu objek sinkronisasi tersedia (diberi sinyal). Jika INFINITE, Lock akan menunggu hingga objek diberi sinyal sebelum kembali.

bWaitForAll
Menentukan apakah semua objek yang ditunggu harus menjadi sinyal pada saat yang sama sebelum kembali. Jika FALSE, Lock akan kembali ketika salah satu objek yang menunggu disinyalir.

dwWakeMask
Menentukan kondisi lain yang diizinkan untuk membatalkan penantian. Untuk daftar lengkap opsi yang tersedia untuk parameter ini, lihat MsgWaitForMultipleObjects di Windows SDK.

Tampilkan Nilai

Jika Lock gagal, ia akan mengembalikan - 1. Jika berhasil, nilai mengembalikan salah satu nilai berikut:

  • Antara WAIT_OBJECT_0 dan WAIT_OBJECT_0 + (jumlah objek - 1)

    Jika bWaitForAll TRUE, semua objek disinyalir (tersedia). Jika bWaitForAll adalah FALSE, nilai yang dikembalikan - WAIT_OBJECT_0 adalah indeks dalam array objek objek yang disinyalir (tersedia).

  • WAIT_OBJECT_0 + (jumlah objek)

    Peristiwa yang ditentukan dalam dwWakeMask tersedia dalam antrean input utas.

  • Antara WAIT_ABANDONED_0 dan WAIT_ABANDONED_0 + (jumlah objek - 1)

    Jika bWaitForAll TRUE, semua objek diberi sinyal, dan setidaknya salah satu objek adalah objek mutex yang ditinggalkan. Jika bWaitForAll adalah FALSE, nilai yang dikembalikan - WAIT_ABANDONED_0 adalah indeks dalam array objek objek mutex yang ditinggalkan yang memenuhi penantian.

  • WAIT_TIMEOUT

    Interval batas waktu yang ditentukan dalam dwTimeOut kedaluwarsa tanpa menunggu berhasil.

Keterangan

Jika bWaitForAll TRUE, Lock akan berhasil kembali segera setelah semua objek sinkronisasi menjadi sinyal secara bersamaan. Jika bWaitForAll false, Lock akan kembali segera setelah satu atau beberapa objek sinkronisasi menjadi sinyal.

Jika Lock tidak dapat segera kembali, ia akan menunggu tidak lebih dari jumlah milidetik yang ditentukan dalam parameter dwTimeOut sebelum kembali. Jika dwTimeOut adalah INFINITE, Lock tidak akan kembali sampai akses ke objek diperoleh atau kondisi yang ditentukan dalam dwWakeMask terpenuhi. Jika tidak, jika Lock mampu memperoleh objek sinkronisasi, objek tersebut akan berhasil ditampilkan; jika tidak, itu akan mengembalikan kegagalan.

CMultiLock::Buka kunci

Merilis objek sinkronisasi yang dimiliki oleh CMultiLock.

BOOL Unlock();

BOOL Unlock(
    LONG lCount,
    LPLONG lPrevCount = NULL);

Parameter

lCount
Jumlah jumlah referensi yang akan dilepaskan. Harus lebih besar dari 0. Jika jumlah yang ditentukan akan menyebabkan jumlah objek melebihi maksimumnya, jumlah tidak diubah dan fungsi mengembalikan FALSE.

lPrevCount
Arahkan ke variabel untuk menerima jumlah sebelumnya untuk objek sinkronisasi. Jika NULL, jumlah sebelumnya tidak dikembalikan.

Tampilkan Nilai

Bukan nol jika fungsi berhasil; jika tidak, 0.

Keterangan

Fungsi ini dipanggil oleh CMultiLockdestruktor.

Bentuk pertama mencoba Unlock membuka kunci objek sinkronisasi yang dikelola oleh CMultiLock. Bentuk Unlock kedua mencoba membuka kunci CSemaphore objek yang dimiliki oleh CMultiLock. Jika CMultiLock tidak memiliki objek terkunci CSemaphore , fungsi mengembalikan FALSE; jika tidak, fungsi mengembalikan TRUE. lCount dan lpPrevCount sama persis dengan parameter CSingleLock::Unlock. Bentuk Unlock kedua jarang berlaku untuk situasi multi-blok.

Lihat juga

Bagan Hierarki