Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Membuat atau membuka objek semaphore bernama atau tidak bernama dan mengembalikan handel ke objek.
Sintaksis
HANDLE CreateSemaphoreExW(
[in, optional] LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
[in] LONG lInitialCount,
[in] LONG lMaximumCount,
[in, optional] LPCWSTR lpName,
DWORD dwFlags,
[in] DWORD dwDesiredAccess
);
Parameter
[in, optional] lpSemaphoreAttributes
Penunjuk ke struktur SECURITY_ATTRIBUTES. Jika parameter ini NULL, handel semaphore tidak dapat diwariskan oleh proses turunan.
lpSecurityDescriptor anggota struktur menentukan deskriptor keamanan untuk semaphore baru. Jika parameter ini null, semaphore mendapatkan deskriptor keamanan default. ACL dalam deskriptor keamanan default untuk semaphore berasal dari token utama atau peniruan pembuat.
[in] lInitialCount
Jumlah awal untuk objek semaphore. Nilai ini harus lebih besar dari atau sama dengan nol dan kurang dari atau sama dengan lMaximumCount. Status semaphore disinyalir ketika jumlahnya lebih besar dari nol dan tidak ditandatangani ketika nol. Jumlah dikurangi satu setiap kali fungsi tunggu merilis utas yang menunggu semaphore. Jumlah ditingkatkan dengan jumlah yang ditentukan dengan memanggil fungsi ReleaseSemaphore
[in] lMaximumCount
Jumlah maksimum untuk objek semaphore. Nilai ini harus lebih besar dari nol.
[in, optional] lpName
Penunjuk ke string null-terminated yang menentukan nama objek semaphore. Nama ini terbatas pada karakter MAX_PATH. Perbandingan nama peka huruf besar/kecil.
Jika lpName cocok dengan nama objek semaphore bernama yang ada, parameter lInitialCount dan lMaximumCount diabaikan karena telah ditetapkan oleh proses pembuatan. Jika parameter lpSemaphoreAttributes tidak null, itu menentukan apakah handel dapat diwariskan.
Jika lpNameNULL, objek semaphore dibuat tanpa nama.
Jika
Nama dapat memiliki awalan "Global" atau "Lokal" untuk secara eksplisit membuat objek di namespace layanan global atau sesi. Sisa nama dapat berisi karakter apa pun kecuali karakter garis miring terbelakang (\). Untuk informasi selengkapnya, lihat Namespace Objek Kernel. Peralihan pengguna cepat diimplementasikan menggunakan sesi Layanan Terminal. Nama objek kernel harus mengikuti panduan yang diuraikan untuk Layanan Terminal sehingga aplikasi dapat mendukung beberapa pengguna.
Objek dapat dibuat di namespace privat. Untuk informasi selengkapnya, lihat Object Namespaces.
dwFlags
Parameter ini dicadangkan dan harus 0.
[in] dwDesiredAccess
Masker akses untuk objek semaphore. Untuk daftar hak akses, lihat Synchronization Object Security and Access Rights.
Mengembalikan nilai
Jika fungsi berhasil, nilai pengembalian adalah handel ke objek semaphore. Jika objek semaphore bernama ada sebelum panggilan fungsi, fungsi mengembalikan handel ke objek yang ada dan GetLastError mengembalikan ERROR_ALREADY_EXISTS.
Jika fungsi gagal, nilai yang dikembalikan adalah NULL. Untuk mendapatkan informasi kesalahan yang diperluas, panggil GetLastError.
Komentar
Status objek semaphore disinyalir ketika jumlahnya lebih besar dari nol, dan tidak ditandatangani ketika jumlahnya sama dengan nol. Parameter
Setiap utas proses panggilan dapat menentukan handel semaphore-object dalam panggilan ke salah satu fungsi tunggu . Fungsi tunggu objek tunggal kembali ketika status objek yang ditentukan disinyalir. Fungsi tunggu beberapa objek dapat diinstruksikan untuk mengembalikan baik ketika salah satu atau ketika semua objek yang ditentukan diberi sinyal. Saat fungsi tunggu kembali, utas tunggu dirilis untuk melanjutkan eksekusinya. Setiap kali utas menyelesaikan tunggu objek semaphore, jumlah objek semaphore dikurangi oleh satu. Setelah utas selesai, alur memanggil fungsi ReleaseSemaphore
Beberapa proses dapat memiliki handel objek semaphore yang sama, memungkinkan penggunaan objek untuk sinkronisasi antarproses. Mekanisme berbagi objek berikut tersedia:
- Proses turunan yang dibuat oleh fungsi
CreateProcess dapat mewarisi handel ke objek semaphore jika parameter lpSemaphoreAttributes CreateSemaphoreEx diaktifkan warisan. - Proses dapat menentukan handel semaphore-object dalam panggilan ke fungsi
DuplicateHandle untuk membuat handel duplikat yang dapat digunakan oleh proses lain. - Proses dapat menentukan nama objek semaphore dalam panggilan ke fungsi
OpenSemaphore atauCreateSemaphoreEx.
Persyaratan
| Syarat | Nilai |
|---|---|
| klien minimum yang didukung | Windows Vista [aplikasi desktop | Aplikasi UWP] |
| server minimum yang didukung |
Windows Server 2008 [aplikasi desktop | Aplikasi UWP] |
| Platform Target |
Windows |
| Header |
synchapi.h (termasuk Windows.h) |
| Pustaka |
Kernel32.lib |
| DLL |
Kernel32.dll |
Lihat juga
Fungsi Sinkronisasi