Mutex vs Sự kiện
Trong C #, có rất nhiều tùy chọn đồng bộ hóa luồng khác nhau. Hai được sử dụng rộng rãi hơn là mutex và sự kiện. Chính xác thì sự khác biệt giữa hai điều này là gì? Cái nào là lựa chọn tốt hơn?
Tùy chọn sự kiện có thể cung cấp cho các chủ đề tùy chọn để chặn cho đến khi một sự kiện được phát sóng, do đó, tên là sự kiện. Nó cũng giống như đặt một cái gì đó vào giấc ngủ và chỉ đánh thức nó khi có điều gì đó quan trọng xảy ra. Các sự kiện không giống như mutexes vì mutexes không có tùy chọn hoặc chức năng báo hiệu. Các sự kiện có thể xóa tín hiệu một khi ai đó có thể đợi nó đã được đánh thức. Ngay cả các API cũng có thể cho phép tùy chọn chặn cho đến khi một hoặc tất cả các sự kiện khác nhau được báo hiệu. Ngoài ra, các sự kiện là các đối tượng kernel. Họ không phải là người nhẹ hơn so với các mutexes. Một sự kiện về cơ bản là một đối tượng kernel có hai trạng thái. Thông thường, một sự kiện báo hiệu sự kiện sắp diễn ra và đôi khi là kết thúc hoạt động I / O.
Ngay lập tức, Mutex là viết tắt của Mutual Exinating. Nó là một hình thức của cơ chế phối hợp phạm vi cho các tài nguyên được chia sẻ. Hãy nghĩ về nó như một hình thức giao dịch. Bạn không bắt buộc phải chờ mặc dù bạn muốn truy cập một vài tài nguyên được chia sẻ (chỉ trong trường hợp những người khác đang truy cập vào nó) bạn đang chặn. Một mutex bao gồm hai trạng thái mặc dù nó tồn tại để có hiệu lực loại trừ lẫn nhau. Điều này là khi bạn muốn bảo vệ một đoạn mã thường cập nhật tài nguyên được chia sẻ từ phần mà mutex được yêu cầu cho phần mà nó sẽ được phát hành. Điều này dẫn đến thực tế là không có chủ đề nào khác có thể đi qua phần.
Những người đã cố gắng mô phỏng một sự kiện với sự trợ giúp của một mutex đã gặp phải vấn đề trong đó ngay khi khóa được lấy hoặc sự kiện được báo hiệu, người này sẽ giữ mọi người khác cho đến khi khóa được phát hành. Đây không phải là ngữ nghĩa của một sự kiện đang được báo hiệu. Một sự kiện có thể vẫn được đăng và một dạng cổng sẽ có sẵn cho tất cả các thử nghiệm luồng trong trường hợp không có bất kỳ khóa nào. Mutex cam kết đồng bộ hóa quá trình là trong đối tượng chế độ kernel. Các sự kiện được thực hiện để đồng bộ hóa đa luồng theo một phương thức nằm trong đối tượng chế độ người dùng.
Đối tượng Mutex quá nặng và quá chung chung. Đối tượng sự kiện nhẹ hơn nhiều. Đồng bộ hóa chế độ người dùng được sử dụng trong hầu hết các tình huống do lý do nó cung cấp ít chu kỳ CPU hơn. Mutex rất giống một phần quan trọng và được sử dụng để đồng bộ hóa quyền truy cập vào các tài nguyên được chia sẻ. Các sự kiện có chức năng hoàn toàn khác vì chúng được sử dụng để đồng bộ hóa các tác vụ hoặc để quản lý lập lịch tác vụ cho một số người.
Các sự kiện giống như một biến điều kiện, không giống như Mutex, giống như một
theo dõi trong một số thuật ngữ, hoặc nó có thể là một hình thức truyền thống của semaphore / mutex.
Tóm lược:
1. Tùy chọn sự kiện có thể cung cấp cho các chủ đề tùy chọn để chặn cho đến khi một sự kiện được phát sóng, do đó, tên là sự kiện.
2. Một sự kiện về cơ bản là một đối tượng kernel có hai trạng thái. Thông thường, một sự kiện báo hiệu sự kiện sắp diễn ra và đôi khi là kết thúc hoạt động I / O.
3. Mut Mutex là viết tắt của Mutual Loại trừ. Nó là một hình thức của cơ chế phối hợp phạm vi cho các tài nguyên được chia sẻ.
4.Mutex cam kết đồng bộ hóa quá trình trong đối tượng chế độ kernel. Các sự kiện được thực hiện để đồng bộ hóa đa luồng theo một phương thức nằm trong đối tượng chế độ người dùng.
5. Các phần tử là một biến điều kiện, không giống như Mutex, giống như một
theo dõi trong một số thuật ngữ, hoặc nó có thể là một hình thức truyền thống của semaphore / mutex.