Kelas CSemaphore
Objek kelas CSemaphore
mewakili "semaphore" — objek sinkronisasi yang memungkinkan jumlah utas terbatas dalam satu atau beberapa proses untuk mengakses Mempertahankan hitungan jumlah utas yang saat ini mengakses sumber daya tertentu.
Sintaks
class CSemaphore : public CSyncObject
Anggota
Konstruktor Publik
Nama | Deskripsi |
---|---|
CSemaphore::CSemaphore | Membuat CSemaphore objek. |
Keterangan
Semaphores berguna dalam mengontrol akses ke sumber daya bersama yang hanya dapat mendukung sejumlah pengguna terbatas. Jumlah CSemaphore
objek saat ini adalah jumlah pengguna tambahan yang diizinkan. Ketika jumlah mencapai nol, semua upaya untuk menggunakan sumber daya yang dikontrol oleh CSemaphore
objek akan dimasukkan ke dalam antrean sistem dan menunggu hingga waktu habis atau hitungan naik di atas 0. Jumlah maksimum pengguna yang dapat mengakses sumber daya terkontrol pada satu waktu ditentukan selama konstruksi CSemaphore
objek.
Untuk menggunakan CSemaphore
objek, buat CSemaphore
objek saat diperlukan. Tentukan nama semaphore yang ingin Anda tunggu, dan aplikasi Anda awalnya harus memilikinya. Anda kemudian dapat mengakses semaphore saat konstruktor kembali. Panggil CSyncObject::Buka kunci setelah Anda selesai mengakses sumber daya yang dikontrol.
Metode alternatif untuk menggunakan CSemaphore
objek adalah menambahkan variabel jenis CSemaphore
sebagai anggota data ke kelas yang ingin Anda kontrol. Selama konstruksi objek terkontrol, panggil konstruktor CSemaphore
anggota data yang menentukan jumlah akses awal, jumlah akses maksimum, nama semaphore (jika akan digunakan di seluruh batas proses), dan atribut keamanan yang diinginkan.
Untuk mengakses sumber daya yang dikontrol oleh objek dengan CSemaphore
cara ini, pertama-tama buat variabel jenis CSingleLock atau ketik CMultiLock di fungsi anggota akses sumber daya Anda. Kemudian panggil fungsi anggota objek Lock
kunci (misalnya, CSingleLock::Lock). Pada titik ini, utas Anda akan mendapatkan akses ke sumber daya, menunggu sumber daya dirilis dan mendapatkan akses, atau menunggu sumber daya dirilis dan kehabisan waktu, gagal mendapatkan akses ke sumber daya. Bagaimanapun, sumber daya Anda telah diakses dengan cara yang aman utas. Untuk melepaskan sumber daya, gunakan fungsi anggota objek Unlock
kunci (misalnya, CSingleLock::Unlock), atau izinkan objek kunci jatuh dari cakupan.
Atau, Anda dapat membuat objek berdiri CSemaphore
sendiri, dan mengaksesnya secara eksplisit sebelum mencoba mengakses sumber daya yang dikontrol. Metode ini, sementara lebih jelas bagi seseorang yang membaca kode sumber Anda, lebih rentan terhadap kesalahan.
Untuk informasi selengkapnya tentang cara menggunakan CSemaphore
objek, lihat artikel Multithreading: Cara Menggunakan Kelas Sinkronisasi.
Hierarki Warisan
CSemaphore
Persyaratan
Header: afxmt.h
CSemaphore::CSemaphore
Membuat objek bernama atau tidak bernama CSemaphore
.
CSemaphore(
LONG lInitialCount = 1,
LONG lMaxCount = 1,
LPCTSTR pstrName = NULL,
LPSECURITY_ATTRIBUTES lpsaAttributes = NULL);
Parameter
lInitialCount
Jumlah penggunaan awal untuk semaphore. Harus lebih besar dari atau sama dengan 0, dan kurang dari atau sama dengan lMaxCount.
lMaxCount
Jumlah penggunaan maksimum untuk semaphore. Harus lebih besar dari 0.
pstrName
Nama semaphore. Harus disediakan jika semaphore akan diakses di seluruh batas proses. Jika NULL
, objek tidak akan diberi nama. Jika nama cocok dengan semaphore yang ada, konstruktor membangun objek baru CSemaphore
yang mereferensikan semaphore nama tersebut. Jika nama cocok dengan objek sinkronisasi yang ada yang bukan semaphore, konstruksi akan gagal.
lpsaAttributes
Atribut keamanan untuk objek semaphore. Untuk deskripsi lengkap tentang struktur ini, lihat SECURITY_ATTRIBUTES di Windows SDK.
Keterangan
Untuk mengakses atau melepaskan CSemaphore
objek, buat objek CMultiLock atau CSingleLock dan panggil fungsi anggota Lock and Unlock-nya.
Penting
Setelah membuat CSemaphore
objek, gunakan GetLastError untuk memastikan bahwa mutex belum ada. Jika mutex memang ada secara tiba-tiba, itu mungkin menunjukkan proses nakal berjongkok dan mungkin berniat menggunakan mutex dengan berbahaya. Dalam hal ini, prosedur sadar keamanan yang direkomendasikan adalah menutup handel dan melanjutkan seolah-olah ada kegagalan dalam membuat objek.