Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

สัญญาณใน C #


คลาสสัญญาณช่วยให้คุณกำหนดขีดจำกัดจำนวนเธรดที่สามารถเข้าถึงส่วนที่สำคัญได้ คลาสนี้ใช้เพื่อควบคุมการเข้าถึงพูลของทรัพยากร 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...