Bagikan melalui


Kelas CSemaphore

Objek kelas CSemaphore mewakili "semaphore". Semaphore adalah objek sinkronisasi yang mengontrol akses ke sumber daya bersama dan mencegah kondisi balapan.

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 lain yang diizinkan. Ketika jumlah mencapai nol, semua upaya untuk menggunakan sumber daya yang dikontrol oleh CSemaphore objek dimasukkan ke dalam antrean sistem dan menunggu hingga waktu habis, atau jumlah 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. Hubungi CSyncObject::Unlock saat 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 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 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

Tajuk: 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 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 gagal.

lpsaAttributes
Atribut keamanan untuk objek semaphore. Untuk deskripsi lengkap tentang struktur ini, lihat SECURITY_ATTRIBUTES di Windows SDK.

Keterangan

Untuk mengakses atau merilis CSemaphore objek, buat CMultiLock objek atau CSingleLock dan panggil fungsi anggota dan Lock.

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

CSyncObject Kelas
Bagan Hierarki