2009-10-12 46 views
16

Mutex và semaphore trong C# là gì? Chúng ta cần triển khai ở đâu?Mutex và semaphore Trong C# là gì? nơi chúng ta cần phải thực hiện?

Làm cách nào chúng tôi có thể làm việc với chúng trong đa luồng?

+5

đó là cách quá lớn một chủ đề để trả lời IMHO .. bạn có bất kỳ vấn đề cụ thể? – Naveen

+0

Naveen xin vui lòng đề nghị tôi một số câu hỏi bị phân hủy để tôi có thể đào sâu vào nó .. –

Trả lời

27

Bạn nên bắt đầu tại MSDN.

  • System.Threading.Mutex: Nguyên thủy đồng bộ hóa cũng có thể được sử dụng để đồng bộ hóa giữa các quá trình.
  • System.Threading.Semaphore: Giới hạn số lượng chủ đề có thể truy cập tài nguyên hoặc nhóm tài nguyên đồng thời.

Thông thường, bạn chỉ sử dụng Mutex trên các quy trình, ví dụ: nếu bạn có tài nguyên mà nhiều ứng dụng phải chia sẻ hoặc nếu bạn muốn xây dựng một ứng dụng đơn lẻ (tức là chỉ cho phép 1 bản sao được chạy cùng một lúc).

Một semaphore cho phép bạn giới hạn quyền truy cập vào một số chuỗi đồng thời cụ thể, để bạn có thể có, ví dụ, tối đa hai luồng thực thi một đường dẫn mã cụ thể tại một thời điểm.

+5

+1 cho MSDN. Đó là RTFM-goto cho mọi thứ trong không gian Windows API. –

+0

Semaphores cũng có thể được sử dụng để đồng bộ hóa giữa các quá trình. "Các semaphores hệ thống được đặt tên có thể nhìn thấy trong suốt hệ điều hành, và có thể được sử dụng để đồng bộ hóa các hoạt động của các quá trình": https://msdn.microsoft.com/en-us/library/ system.threading.semaphore (v = vs.110) .aspx –

5

Bạn có thể muốn xem câu lệnh khóa. Ứng dụng có thể xử lý phần lớn các tác vụ đồng bộ hóa chuỗi trong C#

class Test { 
    private static object Lock = new object(); 

    public function Synchronized() 
    { 
     lock(Lock) 
     { 
      // Only one thread at a time is able to enter this section 
     } 
    } 
} 

Tuyên bố khóa được thực hiện bằng cách gọi Monitor.Enter và Monitor.Exit. Nó tương đương với đoạn mã sau:

Monitor.Enter(Lock);  
try 
{ 
    // Only one thread at a time is able to enter this section 
} 
finally 
{ 
    Monitor.Exit(Lock); 
} 
+2

Câu trả lời hay và có khả năng hữu ích, nhưng không thực sự là câu trả lời cho câu hỏi đặt ra. Suy nghĩ về một -1, nhưng để nó ở bình luận này. ;-) – peSHIr

+0

Vâng việc thực hiện được thay đổi trong C# 5.0 :) – KadekM

Các vấn đề liên quan