2010-09-16 33 views
7

Tại sao chúng ta cần Mutex và Sự kiện trong Windows? Trong ý nghĩa không thể có cửa sổ chỉ Mutex? Điều gì có thể được thực hiện với các sự kiện không thể thực hiện với Mutex?Mutex và Sự kiện trên Windows

Trả lời

9

Sự kiện cho phép chuỗi chặn cho đến khi một số sự kiện (do đó tên) được phát sóng. Chặn trên một sự kiện có nghĩa là "Đánh thức tôi khi có điều gì đó xảy ra"; bạn mong đợi được ngủ. Sự kiện là một cơ chế báo hiệu và cung cấp hỗ trợ cho điều này không tìm thấy trên mutexes, chẳng hạn như tự động có thể xóa tín hiệu ngay sau khi ai đó chờ nó được đánh thức. Ngoài ra, API cho phép chặn cho đến khi một trong số hoặc tất cả một số sự kiện được báo hiệu.

Mutex (Mutual Exclusion), mặt khác, là một cơ chế phối hợp phạm vi cho các tài nguyên được chia sẻ. Hãy suy nghĩ giao dịch. Bạn không mong đợi để chờ đợi nhưng muốn truy cập một số tài nguyên được chia sẻ và chỉ trong trường hợp những người khác đang truy cập vào tài nguyên đó, bạn đang chặn.

Nếu bạn cố gắng mô phỏng Sự kiện bằng cách sử dụng mutex, bạn sẽ gặp phải sự cố ngay khi bạn mua khóa (khi có nghĩa là "sự kiện được báo hiệu"), bạn sẽ giữ mọi thứ khác cho đến khi bạn phát hành Khóa. Đó không phải là ngữ nghĩa của việc báo hiệu một sự kiện; nó có thể vẫn được đăng và "cổng" sẽ được mở cho mọi thử nghiệm luồng cho sự kiện, mà không có bất kỳ khóa nào.

+0

"là cơ chế phối hợp phạm vi cho các tài nguyên được chia sẻ. Hãy suy nghĩ giao dịch" ... bạn đã viết [this] (http://www.differencebetween.net/miscellaneous/difference-between-mutex-and-event/) là tốt? –

1

Mutex dành riêng cho đồng bộ hóa interprocess. Đây là đối tượng chế độ lõi. Sự kiện đồng bộ hóa đa luồng trong một quy trình. Đây là đối tượng chế độ người dùng.

Đối tượng Mutex rất chung chung và nặng, mặt khác đối tượng sự kiện có nhiều ánh sáng hơn. Trong hầu hết các trường hợp, bạn phải sử dụng đồng bộ hóa chế độ người dùng, vì nó cung cấp ít chu kỳ CPU hơn.

+0

Opps (nhỡ ... – yozhik

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