คลาสสัญญาณช่วยให้คุณกำหนดขีดจำกัดจำนวนเธรดที่สามารถเข้าถึงส่วนที่สำคัญได้ คลาสนี้ใช้เพื่อควบคุมการเข้าถึงพูลของทรัพยากร System.Threading.Semaphore เป็นเนมสเปซสำหรับ Semaphore เนื่องจากมีเมธอดและคุณสมบัติทั้งหมดที่จำเป็นสำหรับการนำ Semaphore ไปใช้
สำหรับการใช้สัญญาณใน C # คุณเพียงแค่สร้างอินสแตนซ์ของวัตถุสัญญาณ มีข้อโต้แย้งอย่างน้อยสองข้อ -
ข้อมูลอ้างอิง
−
MSDN
ซีเนียร์ | ตัวสร้าง &คำอธิบาย |
---|---|
1 | สัญญาณ (Int32,Int32) เริ่มต้นอินสแตนซ์ใหม่ของคลาส Semaphore โดยระบุจำนวนเริ่มต้นของรายการและจำนวนสูงสุดของรายการที่เกิดขึ้นพร้อมกัน |
2 | Semaphore(Int32,Int32,String) - เริ่มต้นอินสแตนซ์ใหม่ของคลาส Semaphore โดยระบุจำนวนเริ่มต้นของรายการและจำนวนสูงสุดของรายการที่เกิดขึ้นพร้อมกัน และเลือกระบุชื่อของอ็อบเจ็กต์สัญญาณระบบ |
3 | สัญญาณ (Int32,Int32,String,บูลีน) เริ่มต้นอินสแตนซ์ใหม่ของคลาส Semaphore โดยระบุจำนวนเริ่มต้นของรายการและจำนวนสูงสุดของรายการพร้อมกัน เลือกระบุชื่อของอ็อบเจ็กต์สัญญาณระบบ และระบุตัวแปรที่ได้รับค่าที่ระบุว่ามีการสร้างสัญญาณระบบใหม่หรือไม่ |
เรามาดูตัวอย่างกัน:
ที่นี่ เราได้ใช้ตัวสร้าง Semaphore ต่อไปนี้ซึ่งเริ่มต้นอินสแตนซ์ใหม่ของคลาส Semaphore โดยระบุจำนวนสูงสุดของรายการที่เกิดขึ้นพร้อมกันและเลือกที่จะจองบางรายการได้
static Semaphore semaphore = new Semaphore(2, 2);
ตัวอย่าง
using System; using System.Threading; namespace Program { class Demo { static Thread[] t = new Thread[5]; static Semaphore semaphore = new Semaphore(2, 2); static void DoSomething() { Console.WriteLine("{0} = waiting", Thread.CurrentThread.Name); semaphore.WaitOne(); Console.WriteLine("{0} begins!", Thread.CurrentThread.Name); Thread.Sleep(1000); Console.WriteLine("{0} releasing...", Thread.CurrentThread.Name); semaphore.Release(); } static void Main(string[] args) { for (int j = 0; j < 5; j++) { t[j] = new Thread(DoSomething); t[j].Name = "thread number " + j; t[j].Start(); } Console.Read(); } } }
ผลลัพธ์
ต่อไปนี้เป็นผลลัพธ์
thread number 2 = waiting thread number 0 = waiting thread number 3 = waiting thread number 1 = waiting thread number 4 = waiting thread number 2 begins! thread number 1 begins! thread number 2 releasing... thread number 1 releasing... thread number 4 begins! thread number 3 begins! thread number 4 releasing... thread number 0 begins! thread number 3 releasing... thread number 0 releasing...