Bagikan melalui


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

CObject

CSyncObject

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.

Lihat juga

Kelas CSyncObject
Bagan Hierarki