Persyaratan: Karena sumber daya perangkat keras yang terbatas, program perlu mengkonsumsi sejumlah sumber daya perangkat keras, dalam kasus konkurensi yang tinggi, jika beberapa metode yang menghabiskan terlalu banyak sumber daya program tidak dibatasi (mengekspor sejumlah besar data ke tabel Excel), hal itu dapat memengaruhi ketidakmampuan seluruh program untuk menyediakan layanan normal, dan juga mempengaruhi pengoperasian normal sistem operasi.
Perbedaan Semaphore dan SemaphoreSlim
SemaphoreSlim dan Semaphore memiliki fungsionalitas yang serupa. SemaphoreSlim sekitar 4 kali lebih cepat dari Semaphore, tetapi SemaphoreSlim tidak dapat digunakan untuk pensinyalan antar-proses.
Alasan peningkatan kinerja adalah karena kelas SemaphoreSlim memberikan alternatif ringan untuk kelas Semaphore, yang tidak menggunakan semaphore kernel Windows. Pada dasarnya, jika Anda tidak perlu memberi nama semaphore, gunakan kelas SemaphoreSlim.
SemaphoreSlim didasarkan pada SpinWait dan Monitor, jadi utas yang menunggu untuk mendapatkan kunci menghabiskan periode siklus CPU, berharap untuk mendapatkan kunci sebelum memberi jalan ke utas lain. Jika ini tidak terjadi, maka utas memungkinkan sistem mengganti konteks dan mencoba lagi saat OS menjadwalkan utas itu lagi (dengan menggunakan beberapa siklus CPU). Jika menunggu lama, mode ini dapat menghabiskan banyak siklus CPU. Jadi kasus terbaik untuk implementasi ini adalah bahwa sebagian besar waktu tidak ada waktu tunggu dan Anda bisa segera mendapatkan kuncinya. Semaphore mengandalkan implementasi di kernel OS, jadi setiap kali kunci diperoleh, dibutuhkan sedikit siklus CPU, tetapi setelah itu utas hanya berhibernasi untuk mendapatkan waktu yang diperlukan untuk mendapatkan kunci.
Dokumentasi Semaphore:https://docs.microsoft.com/en-us ... aphore?view=net-6.0 Dokumentasi SemaphoreSlim:https://docs.microsoft.com/en-us ... reslim?view=net-6.0
Sebelum menjalankan metode, metode tunggu yang umum digunakan adalah sebagai berikutPanggilan sesuai dengan situasi aktual bisnis Anda sendiri!
Wait(): Memblokir utas hingga dapat masuk ke SemaphoreSlim. Wait(0): Metode tidak akan diblokir. Ini akan menguji status pegangan tunggu dan segera kembali. Tunggu: Memblokir utas saat ini hingga dapat masuk ke SemaphoreSlim, sambil menentukan batas waktu menggunakan bilangan bulat bertanda 32-bit.
Kode sumbernya adalah sebagai berikut:
Renderingnya adalah sebagai berikut:
|