Bagikan melalui


Fungsi ReleaseSemaphore (synchapi.h)

Meningkatkan jumlah objek semaphore yang ditentukan dengan jumlah yang ditentukan.

Sintaks

BOOL ReleaseSemaphore(
  [in]            HANDLE hSemaphore,
  [in]            LONG   lReleaseCount,
  [out, optional] LPLONG lpPreviousCount
);

Parameter

[in] hSemaphore

Handel ke objek semaphore. Fungsi CreateSemaphore atau OpenSemaphore mengembalikan handel ini.

Handel ini harus memiliki hak akses SEMAPHORE_MODIFY_STATE . Untuk informasi selengkapnya, lihat Keamanan Objek Sinkronisasi dan Hak Akses.

[in] lReleaseCount

Jumlah di mana jumlah objek semaphore saat ini akan ditingkatkan. Nilai harus lebih besar dari nol. Jika jumlah yang ditentukan akan menyebabkan jumlah semaphore melebihi jumlah maksimum yang ditentukan ketika semaphore dibuat, hitungan tidak diubah dan fungsi mengembalikan FALSE.

[out, optional] lpPreviousCount

Pointer ke variabel untuk menerima hitungan sebelumnya untuk semaphore. Parameter ini bisa null jika jumlah sebelumnya tidak diperlukan.

Nilai kembali

Jika fungsi berhasil, nilai yang dikembalikan bukan nol.

Jika fungsi gagal, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.

Keterangan

Status objek semaphore diberi sinyal ketika jumlahnya lebih besar dari nol dan tidak ditandatangani ketika jumlahnya sama dengan nol. Proses yang memanggil fungsi CreateSemaphore menentukan jumlah awal semaphore. Setiap kali utas tunggu dirilis karena status semaphore yang ditandai, jumlah semaphore berkurang satu.

Biasanya, aplikasi menggunakan semaphore untuk membatasi jumlah utas menggunakan sumber daya. Sebelum utas menggunakan sumber daya, utas menentukan handel semaphore dalam panggilan ke salah satu fungsi tunggu. Ketika fungsi tunggu kembali, fungsi tersebut mengurangi jumlah semaphore satu per satu. Ketika utas telah selesai menggunakan sumber daya, alur memanggil ReleaseSemaphore untuk meningkatkan jumlah semaphore satu per satu.

Penggunaan lain dari ReleaseSemaphore adalah selama inisialisasi aplikasi. Aplikasi dapat membuat semaphore dengan jumlah awal nol. Ini menetapkan status semaphore ke nonsignaled dan memblokir semua utas agar tidak mengakses sumber daya yang dilindungi. Ketika aplikasi menyelesaikan inisialisasinya, aplikasi menggunakan ReleaseSemaphore untuk meningkatkan jumlah ke nilai maksimumnya, untuk mengizinkan akses normal ke sumber daya yang dilindungi.

Tidak dimungkinkan untuk mengurangi jumlah objek semaphore menggunakan ReleaseSemaphore, karena lReleaseCount tidak boleh berupa angka negatif. Untuk membatasi atau mengurangi akses untuk sementara waktu, buat perulangan di mana Anda memanggil fungsi WaitForSingleObject dengan interval waktu habis nol hingga jumlah semaphore telah berkurang cukup. (Perhatikan bahwa utas lain dapat mengurangi hitungan saat perulangan ini sedang dijalankan.) Untuk memulihkan akses, panggil ReleaseSemaphore dengan jumlah rilis yang sama dengan berapa kali WaitForSingleObject dipanggil dalam perulangan.

Contoh

Untuk contoh yang menggunakan ReleaseSemaphore, lihat Menggunakan Objek Semaphore.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2003 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header synchapi.h (termasuk Windows.h pada Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Pustaka Kernel32.lib
DLL Kernel32.dll

Lihat juga

CreateSemaphore

OpenSemaphore

Objek Semaphore

Fungsi Sinkronisasi